我有一个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文件,那么我能为它做些什么呢?
答案 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)
但是可以使用
曝光它们@JvmField
注释lateinit
修饰符const
修饰符详细了解kotlin静态字段here
答案 2 :(得分:1)
您也可以考虑在(伴侣)对象之外的顶层声明它:
var age = 30
class A {
...
}
这可以从Java访问,就像包含AKt
的静态类age
一样。您还可以在包含@file:JvmName("A")
的文件顶部添加age
,以摆脱Kt后缀并通过A.age
访问它。