0

私はこのコードをつかみました:

ClassABC abc = new ClassABC();
for (Field field : abc.getClass().getDeclaredFields()) {
    field.setAccessible(true);
    String name = field.getName();
    Object value = field.get(abc);
    System.out.printf("Field name: %s, Field value: %s%n", name, value);
}

この質問から

ただし、クラスではなくライブオブジェクトから属性を取得する何かが必要です。イントロスペクションが必要であることはわかっていますが、ライブ オブジェクトから取得する方法がわかりません。

4

3 に答える 3

1

これ:

Object value = field.get(abc);

abc によって参照されるインスタンス化された Object から値を取得します。

クラスをイントロスペクトし、提供されたフィールドとメソッドを使用して、インスタンス化されたオブジェクトと対話することしかできません。

于 2012-10-09T09:50:48.433 に答える
0

ただし、クラスではなくライブオブジェクトから属性を取得する何かが必要です。

「ライブ」オブジェクトは何らかのクラスのインスタンスであり、そのクラスはオブジェクトが持つフィールドを決定します。質問のコードは、まさにあなたが必要とすることを行います。

(Java では、新しいフィールド/属性をその場でオブジェクトに追加することはできません... Javascript、Python、Ruby などの言語のように。)

于 2012-10-09T10:05:46.793 に答える
0

クラスには属性/プロパティがあり、オブジェクトは状態であり、それらの属性の値のみを持ちます。

ClassABC abc = new ClassABC();

上記の宣言では、クラス ClassABC のオブジェクトを作成しました。

Object value = field.get(abc);

field.get(abc)object のフィールドの値を返しますabc。このようにして、実行時に Object のプロパティの値についてイントロスペクションを行うことができます。

#Field.get()

指定されたオブジェクトで、この Field によって表されるフィールドの値を返します。値がプリミティブ型の場合、値は自動的にオブジェクトにラップされます。

于 2012-10-09T09:50:12.287 に答える