2015-06-21 48 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' –