Java Reflection,从不同的包创建私有类的对象

时间:2019-06-20 06:48:53

标签: java reflection

我有一个私有类(Deque),我需要从包外部的另一个类(包com.example)中创建一个对象。

package com.example;

final class Deque {

    public Deque() {}

}

使用反射,如何从不在com.example包内部的类创建com.example.Deque类型的对象?

1 个答案:

答案 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