「已注销」 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
    关注

    你这个是空指针异常吧

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料