Java教程

Kotlin 中 val const JvmField JvmStatic 的区别

本文主要是介绍Kotlin 中 val const JvmField JvmStatic 的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文地址


目录

目录
  • 目录
    • val const JvmField JvmStatic
      • 四个关键字的本质含义
      • const 和 JvmField 的区别
      • 从 Java 的角度来看

val const JvmField JvmStatic

四个关键字的本质含义

  • val 的含义是 不可变,等价于 final
    • 所以其有 getter 无 setter,因为有 setter 的话就违背了其 不可变 的特性
  • 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 方法变成静态的。注意,不是把属性本身变成静态
    • 作用于方法时,会把该方法变成静态
    • 其意义仅仅在于,让在 Java 中调用 Kotlin 的时候,和在 Kotlin 中调用 Kotlin 的时候,一样友好
    • Only members in named_objects and companion_objects can be annotated with @JvmStatic

const 和 JvmField 的区别

  • @JvmField 可以修饰 var/valconst 只可以修饰常量 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

从 Java 的角度来看

  • Kotlin 中的普通属性不能直接访问,需要通过其 getter/setter 间接访问
    • class/object 中的 var 有 getter 有 setter,等价于 private
    • class/object 中的 val 有 getter 无 setter,等价于 private final
    • 注意,从 Java 的角度来看,object 中的 var/val 依旧是普通属性,而非静态属性
    • 因为属性需要通过对象 INSTANCE 间接访问,例如:Man.INSTANCE.getName()
  • Kotlin 中的 @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
  • Kotlin 中的 const 属性:静态变量/静态常量,并且没有 getter/setter 方法
    • object 中的 const val 等价于 @JvmField val,等价于 public static final
    • object 中的 private const val 等价于 private static final,只能在 object 内部才能访问

2022-5-4

这篇关于Kotlin 中 val const JvmField JvmStatic 的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!