因此,例如,StringBuilder
继承自抽象类AbstractStringBuilder
。据我了解,StringBuilder
本身没有字段(serialVersionUID
除外)。相反,它的状态由AbstractStringBuilder
中的字段表示,并通过在它覆盖的方法的实现中调用super
来操纵。
有没有办法通过反射来获取char
中声明的value
数组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( ));
}
}
这让我得到了一个包含十六个空字符的数组。请注意,我正在寻找涉及反射的解决方案,因为我需要一种不限于StringBuilder
的通用技术。有什么想法吗?
答案 0 :(得分:7)
char[ ] baz = (char[ ])bar.get(new StringBuilder( ));
你的问题是你正在检查一个新的StringBuilder ......所以它当然是空的(16个字符是默认大小)。您需要传递foo
答案 1 :(得分:0)
在Apache Commons BeanUtils库中查找可能是值得的。这是他们API Javadocs的链接。该库包含许多高级方法,使Reflection更易于使用。