Так, например, 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
.Есть идеи?