Kotlin各种主构造函数区别
1 | class MyClass constructor(i:Int) // 1 |
以上是 Kotlin 主构造函数的几种写法,区别在于:
1、1和2写法是一个意思,平时为方便,基本都用第二种,但在一些特定情况下,必须使用第一种,比如有注释限定符(如@Inject等)、可见性修饰符(如private等)。
2、3和4写法也是一样的,除了属性getter和setter生成区别。var表示该属性可以被修改,val表示该属性不能被修改,所以对应的 val i:Int 只会生成 getter 方法,var i:Int 会同时生成getter 和 setter 方法。
3、2与3/4的区别在于: class MyClass(i:Int) 这种写法的参数 i 只能在构造期间使用,你可以将它传递给超类构造函数,或者在属性初始化函数、或者 init 块中使用。 而 class MyClass(val i:Int) 这种写法则是 Kotlin 为了简化开发的语法糖。
Kotlin 会创建一个与参数同名的属性,并为您初始化它。所以类的每个实例都有一个名为 i 的属性(并且有 getter 和 setter 方法),您可以随时引用它。
4、5与3/4的区别在于给属性 i 添加了可见性修饰符。
默认情况下,Kotlin 中的属性是公共的:您可以从类内部、子类、同一模块中的其他类以及具有 MyClass 实例的任何其他代码访问它们。
但是,在某些情况下,限制访问很有用,因此您可以添加可见性修饰符:internal 阻止其他模块中的代码看到它,protected 仅允许子类看到它,而 private 使其仅在类本身内部可见。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jona's Blog!






