2016-09-20 50 views
4

如何獲得Kotlin數據類的列表declaredFields?像Java的getDeclaredFields()Kotlin反射 - 得到一個類的所有字段名稱

如果這是可能的,它也可以篩選爲publicprivate字段? (像Java的Modifier.isPrivate(field.getModifiers())

+0

您對字段(即原始java類)或屬性(即javabeans或Kotlin類)感興趣嗎?你只處理Kotlin類還是Java類? –

+0

只Kotlin類但@hotkey的解決方案適用於我的特定問題 – Ivaro18

+0

「_沒有關於此call_的文檔」 - 該文檔的鏈接如下。 –

回答

8

可能你想要的是獲得一個類的屬性,而不是字段。這是可以做到如下:

MyClass::class.declaredMemberProperties 

獲取領域,也可以通過Java反射:

MyClass::class.java.declaredFields 

但字段,而在科特林的實現細節,因爲一些屬性可能沒有backing field


至於知名度,爲屬性,你可以檢查吸氣可見性修飾符:

val p = MyClass::class.declaredMemberProperties.first() 
val modifiers = p.javaGetter?.modifiers 

注:這是null在一個簡單的private val@JvmField的使用情況。那麼你可以檢查p.javaField

然後,如果modifiers不是null,只需與Modifier.isPrivate(...)覈對。

Kotlin中的房產可能有separate visibility modifiers for getter and setter,但是設置者的訪問權限不能比getter更寬容,這實際上是屬性可見性。

+0

,是否有可能創建一個MyClass對象,並設置這些'declaredFields'(使用Java反射)與'Field.name'? – Ivaro18

相關問題