如何通过反射访问抽象父类中的实例字段?

gde*_*ohn 2 java reflection abstract-class

因此,例如,StringBuilder继承自抽象类AbstractStringBuilder.据我了解,StringBuilder本身没有字段(除了serialVersionUID).相反,它的状态由字段表示,AbstractStringBuilder并通过调用super它覆盖的方法的实现来操纵.

是否有一种方法通过反射来获取声明的私有char数组与特定的实例相关联?这是我得到的最接近的.valueAbstractStringBuilderStringBuilder

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( ));
   }
}
Run Code Online (Sandbox Code Playgroud)

这让我得到了一个包含十六个空字符的数组.请注意,我正在寻找涉及反射的解决方案,因为我需要一种不限于此的通用技术StringBuilder.有任何想法吗?

Cur*_*Dog 7

char[ ] baz = (char[ ])bar.get(new StringBuilder( ));
Run Code Online (Sandbox Code Playgroud)

你的问题是你正在检查一个新的StringBuilder ......所以它当然是空的(16个字符是默认大小).你需要传递foo