因此,例如,StringBuilder
繼承自抽象類AbstractStringBuilder
。據我瞭解,StringBuilder
本身沒有字段(除了serialVersionUID
)。相反,其狀態由AbstractStringBuilder
中的字段表示,並通過在其覆蓋的方法的實現中調用super
來操縱。如何通過反射訪問抽象父類中的實例字段?
是否有通過反射的方式來獲得命名value
私人char
陣列AbstractStringBuilder
宣佈與中StringBuilder
特定實例相關聯?這是我得到的最接近的。
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());
}
}
這使我得到一個由16個空字符組成的數組。請注意,我正在尋找涉及反射的解決方案,因爲我需要的通用技術不限於StringBuilder
。有任何想法嗎?
您爲什麼認爲Object類有一個名爲value的字段? – RoflcoptrException 2010-12-05 22:41:53
@Roflcoptr我不這麼認爲。 `AbstractStringBuilder`有一個名爲`value`的字段。 – gdejohn 2010-12-05 22:43:28