cls = S">

对String的value进行反射set报出一堆warning和IllegalArgumentException异常

毕业设计客栈 论文问答 1
public static void main(String[] args) throws Exception{
        String s="abc";
        Class<? extends String> cls = String.class;
        Field value = cls.getDeclaredField("value");
        value.setAccessible(true);
        value.set(s,"abcd".toCharArray());
        System.out.println(s.hashCode());
}

报错: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by Demo (file:/D:/1.%e5%9e%83%e5%9c%be%e7%ab%99/JAVA/%e5%8f%8d%e5%b0%84/out/production/%e5%8f%8d%e5%b0%84/) to field java.lang.String.value WARNING: Please consider reporting this to the maintainers of Demo WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release Exception in thread "main" java.lang.IllegalArgumentException: Can not set final [B field java.lang.String.value to [C at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) at java.base/jdk.internal.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifiedObjectFieldAccessorImpl.java:83) at java.base/java.lang.reflect.Field.set(Field.java:780) at Demo.main(Demo.java:10)

回复

共1条回复 我来回复
  • 源码工坊
    这个人很懒,什么都没有留下~
    评论

    应该是string的value是用final修饰的,所以你改不了

    StringBuffer和StringBuilder应该就能改了

    0条评论

发表回复

登录后才能评论