2010-02-13 3 views

Antwort

23

Ja, Es ist ein normales Feld. Sie können prüfen, ob es durch vergänglich ist:

Modifier.isTransient(field.getModifiers()); 

transiente: Ein Schlüsselwort in der Java-Programmiersprache, die ein Feld eines Objekts ist nicht Teil der serialisierten Form anzeigt. Wenn ein Objekt serialisiert wird, sind die Werte seiner Übergangsfelder nicht in der seriellen Darstellung enthalten, während die Werte seiner nicht-flüchtigen Felder enthalten sind.

Also kein logischer Grund dafür, dass es nicht durch Reflexion zugänglich ist. Es wird der Wert des Feldes ignoriert (manchmal), nicht das Feld selbst.

(btw, was Sie von nur versuchen, behindert getDeclaredField("yourTransientField") zu nennen?)

+0

Verpasste eine Parens in der ersten Code-Chunk :) – RCIX

3

transient zeigt an, dass das Feld nicht serialisiert werden. Das Feld wird immer noch von der Klasse deklariert, also ist es ein faires Spiel zum Nachdenken.

2

Unter allen Objekten, die serialisiert werden müssen, gibt es solche, die nicht serialisiert werden müssen. Deshalb sind diese Objekte mit dem Schlüsselwort transient gekennzeichnet.

0

transient Felder haben nichts mit Reflexion zu tun. Das Schlüsselwort signalisiert nur, dass ein Feld während Java serialization Prozess übersprungen werden sollte. So kann Reflexion auf transient Felder wie alle anderen Felder zugreifen.