2016-09-20 20 views
4

Kotlinデータクラスのリストを得るにはどうすればdeclaredFieldsですか? JavaのようにgetDeclaredFields()Kotlin reflection - クラスのフィールド名をすべて取得する

publicとフィールドをフィルタリングすることも可能ですか? (JavaのようにModifier.isPrivate(field.getModifiers())

+0

フィールド(生のJavaクラス)またはプロパティ(javabeansまたはKotlinクラス)に興味がありますか? Kotlinクラスだけでなく、Javaクラスも扱っていますか? –

+0

コトリンクラスだけですが、私の特定の問題のために@hotkeyのソリューションが有効でした – Ivaro18

+0

"このコールに関するドキュメントはありません_" - そのドキュメントのリンクは以下のとおりです。 –

答えて

8

おそらくあなたがしたいのは、クラスのプロパティを取得することではなく、フィールドです。これは以下のように行うことができます。

MyClass::class.declaredMemberProperties 

取得フィールドは、Javaリフレクションを通じても可能である:

MyClass::class.java.declaredFields 

しかし、フィールドではなく、Kotlinにおける実装の詳細は、いくつかのプロパティには何のbacking fieldを持っていない可能性があるため。可視性に関しては


、プロパティのためにあなたはゲッターの可視性修飾子をチェックすることができます

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

注:それは簡単なprivate valまたは@JvmFieldの使用の場合はnullです。代わりにp.javaFieldを調べることができます。

modifiersnullではない場合は、Modifier.isPrivate(...)で確認してください。

Kotlinのプロパティはseparate visibility modifiers for getter and setterになる可能性がありますが、セッターのアクセスはゲッターのアクセスよりも許容的ではなく、実質的にプロパティの可視性になります。

+0

を逃したので、MyClassオブジェクトを作成し、これらの 'declaredFields'( Javaリフレクション)を 'Field.name'と組み合わせて使用​​しますか? – Ivaro18

2

確かに、Kotlinリフレクションのドキュメントは、API docsKClass.membersの機能があります。また、そのメソッドの宣言にジャンプすることもできますし、ソースコード内にもそのメソッドが記述されていることがわかります。

関連する問題