本文地址
val
的含义是 不可变,等价于 final
不可变
的特性const
的含义是 常量,等价于 static final
val
属性,不能修饰 var
属性,因为修饰 var 的话就违背了其 常量
的特性Modifier const is not applicable to vars
@JvmField
的含义是 字段,也就是说 可被直接访问
直接访问
,而不是通过 getter/setter 方法间接访问(也没有这两个方法)private
属性,因为修饰 private 的话就违背了其 可被直接访问
的特性@JvmField has no effect on a private property
@JvmStatic
的含义是 静态,其是专门为应对 Java 中的 static 而生的
属性
时,会把其 get/set
方法变成静态
的。注意,不是把属性本身变成静态
的方法
时,会把该方法变成静态
的Only members in named_objects and companion_objects can be annotated with @JvmStatic
@JvmField
可以修饰 var/val
,const
只可以修饰常量 val
@JvmField
不能和 private
一起使用,const
可以和 private
一起使用@JvmField
可以用在普通的 class 中,const
只是用在 object
或顶层中
const_val are only allowed on top level or in objects
const_val might be used instead of @JvmField_val in objects
普通属性
:不能直接访问,需要通过其 getter/setter 间接访问
var
有 getter 有 setter,等价于 private
val
有 getter 无 setter,等价于 private final
var/val
依旧是普通属性,而非静态属性INSTANCE
间接访问,例如:Man.INSTANCE.getName()
@JvmField
属性:可以直接访问,并且没有 getter/setter 方法
class
中的 @JvmField var
等价于 public
,需要借助对象访问class
中的 @JvmField val
等价于 public final
object
中的 @JvmField var
等价于 public static
,可以脱离对象直接访问object
中的 @JvmField val
等价于 public static final
,且会被 IDE 提示改为 const val
const
属性:静态变量/静态常量,并且没有 getter/setter 方法
object
中的 const val
等价于 @JvmField val
,等价于 public static final
object
中的 private const val
等价于 private static final
,只能在 object 内部才能访问2022-5-4