java - Java反射,从不同的包创建私有类的对象
问题描述
我有一个私有类(Deque),我需要从包外部的另一个类(包 com.example)创建一个对象
package com.example;
final class Deque {
public Deque() {}
}
使用反射,我将如何从不在包 com.example 中的类创建类型为 com.example.Deque 的对象?
解决方案
这很棘手,通常不建议这样做,但您可以Deque
在包之外创建和对象。我不知道您是否可以正确引用 Deque 类型。
package com.demo;
final class NotADeque {
public NotADeque() {}
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, IllegalAccessException, InvocationTargetException,
InstantiationException {
Class<?> c = Class.forName("com.example.Deque");
Constructor<?> constructor = c.getDeclaredConstructor();
constructor.setAccessible(true);//Make the constructor accessible.
Object o = constructor.newInstance();
System.out.println(o);
}
}
这将创建一个 的实例Deque
,但会Object
引用它。还要查看执行此操作时可能引发的已检查异常的数量,这是一种非常脆弱的方法。有关更多详细信息,请查看此问题
推荐阅读
- eclipse - 在 MacOS 上的 Eclipse 中运行 C++
- c++ - 在位域 [dcl.enum] [class.bit] 中保存枚举类型
- php - admin 无效的用户名和密码错误
- android - 将 Google Firebase 添加到项目后,Ionic 4 无法在移动设备上加载
- c# - 获取分离实体的原始值
- java - 如何在飞行期间从单人无人机直播摄像机镜头?
- r - 无法在 R 中安装 Shiny 最新版本
- jquery - JQuery 验证不检查所有引导选项卡
- python - 如何在python自定义登录中修复url
- c++ - 这个语句到底是什么意思
> 它与堆栈有何不同 ?