Privates Feld mit Reflections lesen

bspainkf36

Erfahrenes Mitglied
Hey,

ich nutze eine 3rd Party Jar und muss auf ein paar private Felder zugreifen. Für das erste Level funktioniert das auch ganz gut.

Code:
Field dataSource = dstore.getClass().getDeclaredField("dataSource");
dataSource.setAccessible(true);
                        
org.geotools.data.jdbc.datasource.DBCPDataSource con = (org.geotools.data.jdbc.datasource.DBCPDataSource) dataSource
.get(dstore);

wenn jetzt ich jetzt auf ein privates Feld aus con zugreifen möchte:

Code:
Field[] declaredFields = con.getClass().getDeclaredFields();

landet leider nichts im Array, jedoch kann im dem Eclipse Debugger das private Feld sehen. Was mache ich falsch? Danke.

Gruß Kon
 
Hallo,

hast du es auch mal mit der getFields() Methode versucht? Eventuell werden die Attribute nicht in der Klasse selbst definiert, sondern geerbt.

Gruß
BK
 
Hi

ich würde dir raten, nicht auf private Propepertys zuzugreifen. Wenn der Hersteller der Klasse der Meinung ist, er braucht es nicht mehr, stehst du im Wald. Private Fields und Methoden sind nicht Bestandteil der Schnittstelle und können jederzeit geändert werden.
 
Danke für den Tipp :) Damit hat es funktioniert:

con.getClass().getSuperclass().getDeclaredFields();

Mir ist klar, dass die Felder nicht zur Schnittstellendefinition gehört ... jedoch brauche ich die Werte :) Im Elfenbeinturm lässt sich immer leicht philosophieren, ich es muss jedoch umsetzten!

Gruß Kon
 
Zuletzt bearbeitet:
Generelle Aussagen sind schön und gut, jedoch passt einfach nicht jeder Deckel auf jeden Topf. Ich baue einen Prototypen - keine sicherheitsrelevante Anwendung um den nächsten ICE steuern zu können. Auch bleibt meinem Prototypen der Wechsel auf eine andere Version erspart.
 

Neue Beiträge

Zurück