首页 > 解决方案 > Java反射,从不同的包创建私有类的对象

问题描述

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

package com.example;

final class Deque {

    public Deque() {}

}

使用反射,我将如何从不在包 com.example 中的类创建类型为 com.example.Deque 的对象?

标签: javareflection

解决方案


这很棘手,通常不建议这样做,但您可以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引用它。还要查看执行此操作时可能引发的已检查异常的数量,这是一种非常脆弱的方法。有关更多详细信息,请查看此问题


推荐阅读