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!