Java反射,从不同的包创建私有(private)类的对象

标签 java reflection

我有一个私有(private)类(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 引用。还要看看执行此操作时可能抛出的已检查异常的数量,这是一种非常脆弱的方法。更多详情查看this question

关于Java反射,从不同的包创建私有(private)类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56680475/

相关文章:

java - 防止Android ImageVIew的点击?

java - 无法理解这个特定的程序

java - spring-boot:我可以修复 spring-boot 2 中的下一个错误吗?

java - 生成随机等级并正确标记它

Scala 反射在运行时解析名称中的通用特征

go - 检查类型变量

java - 来自在 Fargate 集群上的 AWS ECS docker 容器中运行的 java 应用程序的 UnknownHostException

scala - 如何使用scala反射API获取所有包含的类

java - GenericArrayType 接口(interface)的实例

c# - 为什么我无法从其他程序集中加载类?