所以,举例来说,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( ));
}
}
这让我得到了一个包含 16 个空字符的数组。请注意,我正在寻找涉及反射的解决方案,因为我需要一种不限于的通用技术StringBuilder
。有任何想法吗?
char[ ] baz = (char[ ])bar.get(new StringBuilder( ));
你的问题是你正在检查一个新的 StringBuilder...所以它当然是空的(默认大小是 16 个字符)。你需要传入foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)