あなたが求めていることをするための言語的サポートはありません。
リフレクションを使用して、実行時にタイプのメンバーにリフレクティブにアクセスできます(たとえばClass.getDeclaredFields()
、の配列を取得するためField
)が、実行しようとしていることによっては、これが最善の解決策ではない場合があります。
も参照してください
関連する質問
例
これは、リフレクションが実行できることの一部のみを示す簡単な例です。
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
上記のスニペットは、リフレクションを使用して、class String
;の宣言されたすべてのフィールドを検査します。次の出力が生成されます。
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
効果的なJava2nd Edition、アイテム53:リフレクションよりもインターフェースを優先する
これらは本からの抜粋です:
与えられたClass
オブジェクト、あなたが得ることができConstructor
、Method
およびField
クラスのコンストラクタ、メソッドやフィールドを表すインスタンス。[彼らは]あなたに彼らの根底にある対応物を反射的に操作させます。ただし、この力には代償が伴います。
- コンパイル時チェックのすべての利点が失われます。
- リフレクティブアクセスを実行するために必要なコードは、不器用で冗長です。
- パフォーマンスが低下します。
原則として、実行時に通常のアプリケーションでオブジェクトに反射的にアクセスしないでください。
リフレクションを必要とする洗練されたアプリケーションがいくつかあります。例としては、[...意図的に省略...]アプリケーションがこれらのカテゴリのいずれかに該当するかどうかについて疑問がある場合は、おそらく該当しません。