我有如下 Kotlin 对象:
object TestObject {
val name: String = "Hi"
}
我将如何引用 Java 中的TestObject
?下面的代码不理解TestObject.name
:
public class Main {
public static void main(String[] args) {
System.out.println(TestObject.name);
}
}
这里有两件事,都与 Kotlin/JVM 如何生成 Java 字节码有关。 (这些是在其他 Kotlin 代码中看不到的实现细节,但当您从 Java 访问它时会变得明显。
-
单例对象被转换为类,其单个实例存储在该对象的一个名为
INSTANCE
的字段中。 -
Kotlin 属性由访问器方法(getter 和 setter,如果可写,setter(和(如果需要(支持字段组成。 这些被转换为私有字段,并以常规方式命名具有相关可见性的方法(
getField()
和setField()
,或者isField()
和setField()
属性是否称为isField
(。
综上所述,您可以将 Java 代码中问题中的属性引用为:
TestObject.INSTANCE.getName()
(有关如何从 Java 访问 Kotlin 的完整详细信息在这里。