使用保留的包名称访问包私有变量

2024-03-31

我正在研究源代码java.util.HashMap http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/Collections-Jar-Zip-Logging-regex/java/util/HashMap.java.htm我想看看 hashcode 函数在内部数组中分布键的效果如何Entry's(这是一个包私有变量).所以我做了一个名为java.util在我的项目中只是为了检查天气,我可以欺骗编译器认为它是同一个包。令人惊讶的是它有效,我编写了以下代码:

package java.util;

public class HashMapExt<K, V> extends HashMap<K, V> implements Map<K, V> {

    public static void main(String[] args) {
        HashMapExt<Integer, String> mp = new HashMapExt<Integer, String>();
        mp.put(1, "Hello");
        mp.put(2, "Map");
        mp.put(3, "Extention");
        mp.printData();
    }

    void printData() {

        System.out.println(Arrays.toString(table));
    }
}

编译成功,但运行时出现异常:

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)

现在的问题是,是否可以更改默认的安全模型,以便我可以访问内部变量table或者还有其他选择吗(也许通过使用反射) ?


即使可以选择让您的班级在java.util包(例如替换核心 jar 或定义自定义类加载器),您最好使用反射。它简单明了:

Field tableField = HashMap.class.getDeclaredField("table");
tableField.setAccessible(true);
Map.Entry[] entries = (Map.Entry[]) tableField.get(yourMap);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用保留的包名称访问包私有变量 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • 如何桥接 JavaScript(参差不齐)数组和 std::vector> 对象?

    在 JavaScript 中 我有一个 线 列表 每条线都由不定数量的 点 组成 每个点都有以下形式 x y 所以它是一个 3D 参差不齐的数组 现在我需要在 emscripten 的帮助下将它传递给我的 C 代码 embind https
  • Nuget Push 总是返回 404(未找到)

    我尝试将 nuget 包发布到我的 GitHub Packages 帐户 但在所有情况下我都会遇到 404 错误 我已按照 GitHub 网站上的要求进行操作 nuget source Add Name GitHub Source http
  • 限制异步任务

    我想运行一堆异步任务 并限制在任何给定时间可以等待完成的任务数量 假设您有 1000 个 URL 并且您只想一次打开 50 个请求 但是 一旦一个请求完成 您就会打开与列表中下一个 URL 的连接 这样 每次始终打开 50 个连接 直到 U
  • Spring Security 使用有效的 JWT 返回 403

    我正在使用 Postman 来测试我在 Spring Boot 2 2 6 中使用 Spring Security 创建的简单 OAuth2 API 我在请求新用户凭据时成功收到 JWT 但当我尝试使用标头中的此令牌访问它们时 我的所有端点
  • 如何使用2个sql请求和数据集中的2个数据表在水晶报表中显示数据?

    我有一个包含 2 个数据表 a 的数据集 我需要使用 2 个 sql 请求在水晶报表中显示数据 因此 我在数据集中创建了 2 个数据表 DataTable1 和 dataTable2 我尝试了这段代码 但它总是执行第二个 sql 请求 co
  • 给定两个表,从一个表中选择所有数据,并仅从另一个表中选择最新的数据

    我正在尝试构建一个论坛网站 该网站使用 PHP 和 MySQL 数据库来存储其类别和主题内容 在主页上 我想要一个表格 显示所有类别的列表以及每个类别中最近发布的主题 我想编写一个查询 该查询返回类别表中的所有类别 并且仅返回主题表中每个类
  • Illuminate\Support\MessageBag::has() 缺少参数 1

    当我访问我的 Laravel 项目时 它返回以下错误 如何解决它 Missing argument 1 for Illuminate Support MessageBag has called in var www laravel vend
  • MySQL SUM 多列

    我还有一个关于总和的问题 我想对一支棒球队的得分进行求和 将作为本地球员打球时的得分与作为访客打球时的得分相加 匹配表是这样的 Baseball matches Id IdTeamHome IdTeamAway ScoreHome Scor
  • 正则表达式匹配字符串的一部分,但不匹配整个字符串

    这是我用来验证可以包含小写和大写字母 数字和破折号的字符串的正则表达式 a zA Z0 9 其结果如下 abd 火柴 abcd 火柴 abcd0 火柴 abcd0 火柴 abc 不匹配 正确 abc efg 匹配 不正确 不应该 我究竟做错
  • 在 Windows 上编译 Erlang 代码

    我安装了 Erlang 13B 并尝试按照教程进行操作 每次我到达c tut 我得到一个错误而不是 ok tut 所以看起来没有安装任何模块 有人能指出我正确的方向吗 我尝试过 Emacs 但我真的不知道如何使用它 甚至还没有接近让 Erl
  • OpenGL ES 2.0 中的 glTexGen

    我已经尝试了几个小时来用 GL OBJECT LINEAR 实现 glTexGen 的 GLSL 替换 对于 OpenGL ES 2 0 在 Ogl GLSL 中 有 gl TextureMatrix 使这变得更容易 但这在 OpenGL
  • 将对象直接流式传输到 std::string

    给定某种可流式传输的类型 struct X int i friend std ostream operator lt lt std ostream os X const x return os lt lt X lt lt x i lt lt
  • 在 Python 中嵌套函数会产生开销吗?

    在Python中 如果我在父函数中有一个子函数 那么每次调用父函数时子函数是否都会 初始化 创建 将一个函数嵌套在另一个函数中是否会产生任何性能开销 代码对象是预编译的 因此该部分没有开销 函数对象在每次调用时构建 它将函数名称绑定到代码对
  • 在 WPF 中仅画刷椭圆的部分

    我无法找到绘制以下形状的最佳方法 我正在使用下面的代码来绘制Ellipse在视觉层上 但我怎么可能只刷宿舍呢 我认为可以使用LinearGradientBrush or RadialGradientBrush但我不知道如何使用它 var c
  • ActiveMQ NMS:当代理关闭时,connection.start() 会因故障转移协议而挂起

    我有使用 nms activemq 1 5 0 的 C 应用程序 当我的应用程序启动时 它尝试使用故障转移协议连接到代理 我有两个主从配置的代理 如果两个经纪人都关闭了 我的应用程序就会因为以下原因而陷入等待状态 connection st
  • 流行的源代码控制系统如何区分二进制文件和文本文件

    寻找有关不同源代码控制系统如何区分 或检测 文件类型 二进制与文本 的文章 文档或直观知识 特别令人感兴趣的是 Git 与 Mercurial 相比是如何做到这一点的 他们是否看 文件扩展名 文件签名或内容 即该文件是否为 UTF8 各种东
  • 这个C++宏的含义是什么?

    我不明白这个宏的含义 define DECLARE HANDLE n typedef struct n int i n DECLARE HANDLE HWND 我从中学到了C程序 表示连接参数 所以宏等于 typedef struct HW
  • Silverlight 和 C++ 或 C++ 到 C# 正在进行代码转换吗?

    我正在开发一款基于绘图的产品 我希望按照优先级顺序为 iPhone 桌面 OS X Windows 平板电脑 基于 Silveright 的浏览器 Windows Mobile 和 Windows 生成版本 对于 GUI 可移植性 经典的答
  • AVG 将我的程序检测为病毒。这是怎么回事? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions AVG表示 从下面的代码编译出来的可
  • 使用保留的包名称访问包私有变量

    我正在研究源代码java util HashMap http www java2s com Open Source Java Document 6 0 JDK Core Collections Jar Zip Logging regex j