transient
リフレクションを使用してクラスのフィールドを取得できますか? (使用getDeclaredField(..)
)
4 に答える
はい、通常のフィールドです。一時的なものかどうかは、次の方法で確認できます。
Modifier.isTransient(field.getModifiers());
transient : フィールドがシリアライズされた形式のオブジェクトの一部ではないことを示す、Java プログラミング言語のキーワード。オブジェクトがシリアル化されると、一時的なフィールドの値はシリアル表現に含まれませんが、非一時的なフィールドの値は含まれます。
したがって、リフレクションによってアクセスできない論理的な理由はありません。フィールド自体ではなく、(時々) 無視されるのはフィールドの値です。
(ところで、電話をかけようとするのを妨げたのは何getDeclaredField("yourTransientField")
ですか?)
transient
フィールドがシリアル化されないことを示します。フィールドはまだクラスによって宣言されているため、反射の公正なゲームです。
シリアル化する必要があるすべてのオブジェクトの中には、シリアル化する必要のないオブジェクトがあります。そのため、このオブジェクトはキーワード transient でマークされています。
transient
フィールドは反射とは関係ありません。このキーワードは、 Java シリアライゼーションプロセス中にフィールドをスキップする必要があることを示すだけです。そのため、リフレクションはtransient
他のフィールドと同じようにフィールドにアクセスできます。