2015-06-21 49 views
1

在使用伴随对象和Java反射时,将其转化为一些有趣的内容。我不确定它是否有意,或者我只是不完全理解事情。Kotlin同伴对象和反射

我有这样的代码

public class TestClass { 
    companion object { 
     public platformStatic var data: String? = null 
    } 
} 

data场最终被通过反射填补从另一个类。

我发现的是,如果我访问类TestClass.javaClass,我得到的内部伴侣类只有访问该字段的方法。通过javaClass<TestClass>()访问它可以获得期望的Java类,并且可以完全访问这些字段。

我只是错过了一些明显的东西?是否有这种行为的原因?

+0

请注意,在当前Kotlin'platformStatic'已经更改为注释'@ JvmStatic'。此外,函数'javaClass ()'不是'T :: class.java'(因为'T :: class'返回Kotlin'KClass ','.java'扩展返回Java'类')。 。对于属性的后期初始化,请参见[lateinit](https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties)关键字。 –

回答

2

静态字段存储在外部类中以促进Java互操作:您可以说Java中使用TestClass.data来引用该字段(这应该是为什么您首先将其标记为platformStatic的原因)。

+1

请注意,在当前Kotlin'platformStatic'已更改为注释'@ JvmStatic' –