我有一个私有(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/