2017-12-26 1 views
1

im Bild unten habe ich, Eclipse zeigen mir, dass meine "root" Variablen eine verschachtelte Variable namens "localSymbolTable" und es hat eine andere verschachtelte Variable namens "Daten".Gibt es eine Möglichkeit, private Variablen wie Eclipse zu lesen?

enter image description here Da diese Variablen privat sind, kann ich nicht direkt darauf zugreifen. Die Methode, auf sie zuzugreifen, hat mir aus anderen Gründen eine NullPointerException ausgelöst. Ich muss wirklich den Wert der "Daten" -Variable lesen, genau wie es Eclipse im Debug-Modus tut. Gibt es eine Möglichkeit, diese Codierung zu machen? Wenn ja, wie kann ich das tun?

Ich schätze wirklich jede Hilfe.

+2

Wenn es privat ist, sollten Sie nicht direkt darauf zugreifen. Sie können Reflektion verwenden, um die Felder zu erhalten, aber dies verhindert den Zweck des privaten Feldes und ist wahrscheinlich aus verschiedenen Gründen gefährlich. – Carcigenicate

+1

Verwenden Sie Reflektion, bedenken Sie jedoch, dass Reflektion die Leistung Ihres Codes verringert. –

+0

Ist es nicht sinnvoller, ** die offensichtlichen Fehler ** in den Accessoren zu beheben, anstatt zusätzliche Arbeit zu verrichten, um die Accessoren zu vermeiden? –

Antwort

0

Reflexion in Java ermöglicht dies. das Beispiel Check-in here

In Ihrem Fall würde der Code in etwa so aussehen:

Field dataField = root.getLocalSymbolTable().getClass().getDeclaredField("data"); 
dataField.setAccessible(true); 
Object dataFieldValue = dataField.get(root.getLocalSymbolTable()); 

Natürlich Feld aus einem Grund privat sind, können andere Kommentare sehen, und so weiter.

+0

privateField.get? oder dataField.get? –

+0

dataField.get, sorry, bearbeitete Antwort –

Verwandte Themen