「已注销」 2020-03-15 23:14 采纳率: 0%
浏览 320

Java反射操作java链表,出现非法反射警告

今天学习java反射时,想通过反射对创建的java.util.LinkedList 对象的内部头节点进行一些修改,但是出现了非法反射警告,有什么办法能够跳过这个检测机制吗?目前使用jdk11.

测试代码如下:

package com.niss.datastructrue.list;

import java.lang.reflect.Field;

public class ListTest {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        java.util.List<Integer> list = new java.util.LinkedList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        Field head = list.getClass().getDeclaredField("first");
        head.setAccessible(true);
        Field next = head.get(list).getClass().getDeclaredField("next");
        next.setAccessible(true);
        next.set(head.get(list),null);
        System.out.println(list);
    }
}

控制台输出:

"D:\Program Files\Java\jdk-11.0.5\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\apps\IDEA-U\ch-0\193.6494.35\lib\idea_rt.jar=58180:D:\Program Files\JetBrains\apps\IDEA-U\ch-0\193.6494.35\bin" -Dfile.encoding=UTF-8 -classpath E:\JavaStudy\DataStructrue-study\target\test-classes;E:\JavaStudy\DataStructrue-study\target\classes;C:\Users\Ni187\.m2\repository\org\apache\logging\log4j\log4j-core\2.13.0\log4j-core-2.13.0.jar;C:\Users\Ni187\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.0\log4j-api-2.13.0.jar com.niss.datastructrue.list.ListTest
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.niss.datastructrue.list.ListTest (file:/E:/JavaStudy/DataStructrue-study/target/test-classes/) to field java.util.LinkedList.first
WARNING: Please consider reporting this to the maintainers of com.niss.datastructrue.list.ListTest
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.NullPointerException
    at java.base/java.util.LinkedList$ListItr.next(LinkedList.java:897)
    at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:472)
    at java.base/java.lang.String.valueOf(String.java:2951)
    at java.base/java.io.PrintStream.println(PrintStream.java:897)
    at com.niss.datastructrue.list.ListTest.main(ListTest.java:20)

Process finished with exit code 1
  • 写回答

1条回答 默认 最新

  • 技术SOLO网 2023-06-09 11:01
    关注

    你这个是空指针异常吧

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?