首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Lombok 有哪些坑 ?

    Object(java 中默认没有继承关系的类父类都是 Object),那么这里会调用 Object 的equals() 方法,如下 public boolean equals(Object obj)...3.3 关于@data和data 在了解了 @data 的行为后,会发现它和 kotlin 语言中的 data 修饰符有点像:都会自动生成一些方法,并且在继承上也有问题——前者一旦有继承关系就会踩坑,而后者修饰的类是...kotlin 为什么要这样做,二者有没有什么联系呢?...在一篇流传较广的文章 抛弃 Java 改用 Kotlin 的六个月后,我后悔了(译文) https://blog.csdn.net/csdnnews/article/details/80746096 中...kotlin 的开发者回避了这个问题,不使用父类属性并且禁止继承即可。只是 kotlin 的使用者就会发现自己定义的data 对象没法继承,不得不删掉这个关键字手写其对应的方法。

    4.3K20

    Android--Hilt入门

    、构造函数注入 和Dagger相同,Hilt也分两种注入方式,以上篇Dagger中的代码为例子,来对比两个框架的使用区别 1.gradle中配置依赖 工程gradle中导入插件: dependencies...继承至自己生成的类 下面是该例子生成的Hilt_MainActivity: public abstract class Hilt_MainActivity extends AppCompatActivity...contentLayoutId) { super(contentLayoutId); _initHiltInternal(); } // 开始注入 private void...中,也就是全局APP中,旧版本的ApplicationComponent已废弃 @InstallIn(SingletonComponent::class) @Module class NetworkModule...的作用域就简单很多了,因为它预定义了组件和子组件 ,同时又定义了这些组件对应的作用域,上面的例子中,如何保证只实例化一份?

    1.5K20

    源码分析 | 布局文件加载流程

    Activity 中的 setContentView public void setContentView(@LayoutRes int layoutResID) { getWindow()....首先会创建一个 DecorView ,这是一个 继承子 FrameLayout 的View 。也就是说 Window 类中包含了一个 DecorView。...后期勘误:第二个框中:DecorView 是继承自 FrameLayout 的 最终大致的逻辑如上图 我们可以做一个测试,看一下我们分析的有没有问题: override fun onCreate(savedInstanceState...) { //...... } 复制代码 ​ 从源码中可以看到,第一种调用的是第二种,第二种调用的是第三种,根据有没有传入根布局来传入第三个参数。...接着看一下是怎样实例化 View 的 public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot

    47320

    Kotlin语法基础之继承

    Kotlin中所有的类都有一个公有的超类:Any,这是所有没有声明超类的类的默认父类。 class Example //隐式继承自Any Any!=Java.lang.Object。...默认的,Kotlin中所有的类是final的,也就是说不能继承的。 覆写方法 Kotlin总是做一些明确的事情,不像Java,Kotlin要求复写方法时需要显式的注解和重写。...如果没有open注解,比如Base的nv(),那么在子类中是不能覆写该方法的。在一个final类中(没有open注解声明),open成员是禁止的。...class Aoo2 : Aoo { override var count: Int = 0 } 覆写准则 在Kotlin中,实现继承由以下规则控制:如果类从其直接超类继承同一成员的多个实现...总结 Kotlin中的类默认是final的,如果需要子类继承,需要使用open修饰; Kotlin中的方法默认是不允许复写的,只有用open修饰时,子类才可以进行覆写,并且需要使用override进行显示标注

    87690

    第4章 类与面向对象编程第4章 类与面向对象编程

    第4章 类与面向对象编程 在前面的章节中,我们学习了Kotlin的语言基础知识、类型系统等相关的知识。在本章节以及下一章中,我们将一起来学习Kotlin对面向对象编程以及函数式编程的支持。...当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。...在Java 8 和Kotlin中,接口可以实现一些通用的方法。 接口是抽象类的延伸,Kotlin跟Java一样,不支持同时继承多个父类,也就是说继承只能存在一个父类(单继承)。...但是接口不同,一个类可以同时实现多个接口(多组合),不管这些接口之间有没有关系。这样可以实现多重继承。...本章小结 本章我们介绍了Kotlin面向对象编程的特性: 类与构造函数、抽象类与接口、继承与组合等知识,同时介绍了Kotlin中的注解类、枚举类、数据类、嵌套类、内部类、匿名内部类、单例object对象等特性类

    1.8K20

    7. 变量声明和属性(property)

    Java 的成员变量和它们的 get/set 方法 在 Java 中,我们把在类中声明的变量,称为为成员变量(field),函数中声明的变量称为局部变量。...在经典的 Java 设计理念中,成员变量是不建议暴露的,而当你想访问修改成员变量时,应声明其对应的 get/set 方法。...因为成员变量没有办法继承重写 ,无法声明为接口,get/set 权限无法分开控制等。使用 get/set 方法代替直接修改成员变量,更符合面向对象设计。...虽说现在 IDE 都可以帮你快速的生成这些代码,但无法摆脱代码的信息密度低,可读性差的缺点。那么有没有什么语言能够更精简的表达 get/set 的语义呢?有的。...举个例子: class DataList { var dataList: List = listOf() private set // 1 var size: Int /

    1.1K10

    新年 Flag 以及论坛的一个所谓 Kotlin 不完全兼容 Java 的问题

    可以从 Kotlin 中自然地调用现存的 Java 代码 文档上这样说, 但是在实际使用上 public class ApiException extends Exception { public..., int code) { super(throwable); this.code = code; } } 上面的ApiException 继承自 Exception...java 代码已经打包成jar,显示 kotlin 中是无法完全调用已经 实现好的java 代码?...这个问题的根本原因在于 Kotlin 自己定义了一套 Throwable,换句话说 ApiException 在 Kotlin 看来,是继承自 kotlin.Throwable 的,它当中没有 getMessage...实际上我们自己定义的类如果不继承存在 Kotlin 到 Java 映射关系的类型,几乎不会遇到类似的问题。 3. 真的没有办法通过 Kotlin 实现访问吗?

    91710

    解毒 Kotlin Koans: 03 函数参数、重载

    Java 视角看 Kotlin 的默认参数 Java 中是没有默认参数的,那么在 Java 中要怎样调用 Kotlin 中使用了默认参数定义的函数或者方法呢?...,Kotlin 可以用具名参数做到,Java 中就没有办法享受到了。...只有三个版本,很容易发现,对于 Kotlin 中需要具名参数才可以完成的调用情形,Java 中就没有对应的重载版本了。 6....父类多个构造器的继承问题 继承一个 Java 类,这个类的各个构造器不可用默认参数来代替(不然我们就用 @JvmOverloads 好了),例如继承 ArrayList,它的构造器有以下几个版本: public...extends E> c) public ArrayList(int initialCapacity) 这几个版本没的构造器没办法用默认参数的形式合并,我们在 Kotlin 当中继承他时,主构造器只能调用一个父构造器

    89720

    Kotlin的面向对象编程,深入讨论继承写法的问题

    这就是Kotlin面向对象编程最基本的用法了。 继承与构造函数 现在我们开始学习面向对象编程中另一个极其重要的特性,继承。 继承也是基于对现实场景所总结出来的一个概念,其实非常好理解。...这就是Kotlin不同的地方,在Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于Java中给类声明了final关键字。...Kotlin给我们提供了一个init结构体,所有主构造函数中的逻辑都可以写在这里: class Student(val sno: String, val grade: Int) : Person() {...到这里为止都还挺好理解的吧,但是这和那对括号又有什么关系呢?这就牵扯到了Java继承特性中的一个规定,子类中的构造函数必须得调用父类中的构造函数,这个规定在Kotlin中也要遵守。...有的朋友可能会说,在init结构体当中去调用不就好了,这或许是一种办法,但却绝对不是一种好办法,因为绝大多数的场景我们都是不需要编写init结构体的。

    85230

    Kotlin中级(6)- - - Kotlin类之的继承.md

    Kotlin继承类 1.超类(Any) 在Kotlin中,所有的类都是继承自Any类,这是一个没有父类型的类。...一样可以使用Demo类中的属性与函数。这就是继承的好处。...,不管实现类中的函数有没有override修饰符 例如: open class Demo{ fun test(){} // 注意,这个函数没有用open修饰符修饰 } class DemoTest...// 注意,则的`final`修饰符在编辑器中是灰色的,因为Kotlin中默认的类默认是final的 那么当一个基类去继承另外一个基类时,第二个基类不想去覆盖掉第一个基类的方法时,第二个基类的该方法使用...num: Int = 10 } 重写属性中,val和var的区别 这里可以看出重写了num这个属性,并且为这个属性重写了其值为10,但是,还有一点值得我们去注意:当基类中属性的变量修饰符为val的使用

    60960

    Kotlin入门(14)继承的那些事儿

    不过早在《Kotlin入门(12)类的概貌与构造》中,提到MainActivity继承自AppCompatActivity,而Kotlin对于类继承的写法是“class MainActivity : AppCompatActivity...其实也不复杂,open不控制某个对象的访问权限,只决定该对象能否繁衍开来,说白了,就是公告这个家伙有没有资格生儿育女。...于是乎,通过接口定义几个抽象方法,然后在实现该接口的具体类中重写这几个方法,从而间接实现C++多重继承的功能。...在Kotlin中定义接口需要注意以下几点: 1、接口不能定义构造函数,否则编译器会报错“An interface may not have a constructor”; 2、接口的内部方法通常要被实现它的类进行重写...的类继承与Java相比有所不同,首先Kotlin的类默认不可被继承,如需继承则要添加open声明;而Java的类默认是允许被继承的,只有添加final声明才表示不能被继承。

    1.6K50

    源码分析 | Activity-setContentView 我都不带闪

    概要 源码分析 我们先来看一下Activity-setContentView方法: public void setContentView(@LayoutRes int layoutResID) {...Windows 表示一个窗口的概念,Android 中不管是Activity,dialog,还是 Toast 它们的视图都是附加在 Windows 上,因此可以称 windows 是View的直接管理者...我们接着去看 PhoneWindows 的 setContentView() @Override public void setContentView(int layoutResID) { if...() ; 而 PhoneWindows 的 setContentView() 内部会先判断当前有没有根布局 contentParent,也即就是有没有 DecorView,如果没有,执行 installDecor...() 去初始化我们的 DecorView与contentParent; 在 installDecor() 方法里面,会先判断有没有 DecorView,如果没有,先new一个出来,然后判断有没有 contentParent

    19820

    Kotlin学习日志(五)类与对象

    1.3 带默认参数的构造函数 说到默认参数,不知道你有没有想起之前的带默认参数的函数呢?...3.1 开放性修饰符 之前我们写了好多个WildAnimal类,Java和Kotlin关于类的继承还有区别,比如Java中默认每个类都能被继承,除非加了final关键字,而Kotlin刚好相反,它默认每个类都不能被继承...,如果没戴open帽子,该类就只好打光棍了,函数没戴open帽子的话,类的孩子就没有办法修改它。...,然后在实现该接口的具体类中重写这几个方法,从而间接实现类似C++多重继承的功能。...通过一顿操作之后,总结出Kotlin的类继承与Java相比有所不同,主要体现在以下几点: (1)Kotlin的类默认不可被继承,若需继承,则要添加open声明,而Java的类默认是允许被继承的,只有添加

    1.2K20
    领券