Um auf private Felder zugreifen zu können, müssen Sie sie aus den deklarierten Feldern der Klasse abrufen und anschließend zugänglich machen:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
BEARBEITEN : Wie von Aperkins kommentiert , kann sowohl der Zugriff auf das Feld als auch das Festlegen des Zugriffs als auch das Abrufen des Werts Exception
s auslösen , obwohl die einzigen geprüften Ausnahmen, die Sie beachten müssen , oben kommentiert sind.
Das NoSuchFieldException
wird ausgelöst, wenn Sie nach einem Feld mit einem Namen fragen, der keinem deklarierten Feld entspricht.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
Das IllegalAccessException
würde ausgelöst, wenn das Feld nicht zugänglich wäre (zum Beispiel, wenn es privat ist und nicht zugänglich gemacht wurde, indem die f.setAccessible(true)
Zeile verpasst wurde .
Die RuntimeException
s, die ausgelöst werden können, sind entweder SecurityException
s (wenn die JVMs SecurityManager
es Ihnen nicht erlauben, die Zugänglichkeit eines Felds zu ändern) oder IllegalArgumentException
s, wenn Sie versuchen, auf das Feld eines Objekts zuzugreifen, das nicht vom Klassentyp des Felds ist:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type