So erbt zum Beispiel StringBuilder
von der abstrakten Klasse AbstractStringBuilder
. Wie ich es verstehe, hat StringBuilder
keine Felder selbst (außer für serialVersionUID
). Vielmehr wird sein Zustand durch die Felder in AbstractStringBuilder
dargestellt und durch Aufruf von super
in den Implementierungen der Methoden, die er überschreibt, manipuliert.Wie kann ich über Reflektion auf ein Instanzfeld in einer abstrakten Elternklasse zugreifen?
Gibt es eine Möglichkeit über Reflektion des privaten char
Array value
in AbstractStringBuilder
erklärt genannt zu bekommen, die mit einer bestimmten Instanz StringBuilder
verbunden ist? Das ist das nächste, was ich habe.
import java.lang.reflect.Field;
import java.util.Arrays;
public class Test
{
public static void main(String[ ] args) throws Exception
{
StringBuilder foo = new StringBuilder("xyzzy");
Field bar = foo.getClass().getSuperclass().getDeclaredField("value");
bar.setAccessible(true);
char[ ] baz = (char[ ])bar.get(new StringBuilder());
}
}
Das bringt mir ein Array von sechzehn Null-Zeichen. Beachten Sie, dass ich nach Lösungen mit Reflektion suche, da ich eine allgemeine Technik brauche, die nicht auf StringBuilder
beschränkt ist. Irgendwelche Ideen?
Warum denken Sie, dass die Object-Klasse ein Feld namens Wert hat? – RoflcoptrException
@Roflcoptr Das glaube ich nicht. 'AbstractStringBuilder' hat ein Feld namens' value'. – gdejohn
Hmm Wenn ich in der API suche, erbt StringBuilder direkt vom Objekt – RoflcoptrException