如何在kotlin中创建真正的静态属性

时间:2018-04-09 02:18:42

标签: kotlin

我有一个A.java文件 - > class A{ public static Integer age = 30;}

和hava一个B.java文件 - > print(A.age)

但是当我将A.java转换为A.kt时,它不适用于对象随播广告 keyworld。

如果我使用对象,我必须将其更改为print(A.INSTANCE.age) 如果我使用伴侣,我必须将其更改为print(A.Companion.age),但我无法在某种情况下更改B.java文件,那么我能为它做些什么呢?

3 个答案:

答案 0 :(得分:6)

使用

class A {
  companion object {
    @JvmField var age = 114514
  }
}

或者只是

object A {
  @JvmField var age = 114514
}

上述两个代码都会为班级public static int创建A成员。

根据评论,为了避免创建对象,您可以使用文件范围变量。

// A.kt
@file:JvmName("A")
package your.pkg

@JvmField var age = 114514

您可以通过Java中的public static int age访问此A.age

答案 1 :(得分:3)

命名对象 随播广告对象中声明的 Kotlin 属性 从java代码中获得 私有 可见性

但是可以使用

曝光它们
  • @JvmField注释
  • lateinit修饰符
  • const修饰符

详细了解kotlin静态字段here

答案 2 :(得分:1)

您也可以考虑在(伴侣)对象之外的顶层声明它:

var age = 30

class A {
    ...
}

这可以从Java访问,就像包含AKt的静态类age一样。您还可以在包含@file:JvmName("A")的文件顶部添加age,以摆脱Kt后缀并通过A.age访问它。