10

transientリフレクションを使用してクラスのフィールドを取得できますか? (使用getDeclaredField(..))

4

4 に答える 4

26

はい、通常のフィールドです。一時的なものかどうかは、次の方法で確認できます。

Modifier.isTransient(field.getModifiers());

transient : フィールドがシリアライズされた形式のオブジェクトの一部ではないことを示す、Java プログラミング言語のキーワード。オブジェクトがシリアル化されると、一時的なフィールドの値はシリアル表現に含まれませんが、非一時的なフィールドの値は含まれます。

したがって、リフレクションによってアクセスできない論理的な理由はありません。フィールド自体ではなく、(時々) 無視されるのはフィールドの値です。

(ところで、電話をかけようとするのを妨げたのは何getDeclaredField("yourTransientField")ですか?)

于 2010-02-13T06:45:16.480 に答える
3

transientフィールドがシリアル化されないことを示します。フィールドはまだクラスによって宣言されているため、反射の公正なゲームです。

于 2010-02-13T06:49:11.663 に答える
2

シリアル化する必要があるすべてのオブジェクトの中には、シリアル化する必要のないオブジェクトがあります。そのため、このオブジェクトはキーワード transient でマークされています。

于 2011-12-15T10:09:46.710 に答える
0

transientフィールドは反射とは関係ありません。このキーワードは、 Java シリアライゼーションプロセス中にフィールドをスキップする必要があることを示すだけです。そのため、リフレクションはtransient他のフィールドと同じようにフィールドにアクセスできます。

于 2012-11-04T10:01:56.783 に答える