我有一个私有类(Deque),我需要从包外部的另一个类(包com.example)中创建一个对象。
package com.example;
final class Deque {
public Deque() {}
}
使用反射,如何从不在com.example包内部的类创建com.example.Deque类型的对象?
答案 0 :(得分:2)
这很棘手,通常不建议这样做,但是您可以在包外部创建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