当前位置: 首页 > 知识库问答 >
问题:

用java反射实例化私有内部类

羊舌墨一
2023-03-14
public class Main {
    public static void main(String[] args) {}
}

class OtherClass {
    private class Test {}
}

是否可以从类main中的main方法实例化并获得对Test的访问。

共有1个答案

晁英彦
2023-03-14

当使用反射时,您会发现内部类的构造函数将外部类的实例作为附加参数(总是第一个)。

相关信息请参阅以下问题:

>

  • 实例化内部类

    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    public class OuterClass {
    
        private class InnerClass {
    
        }
    
        public OuterClass() {
            super();
        }
    
        public static void main(String[] args) {
            // instantiate outer class
            OuterClass outer = new OuterClass();
    
            // List all available constructors.
            // We must use the method getDeclaredConstructors() instead
            // of getConstructors() to get also private constructors.
            for (Constructor<?> ctor : OuterClass.InnerClass.class
                    .getDeclaredConstructors()) {
                System.out.println(ctor);
            }
    
            try {
                // Try to get the constructor with the expected signature.
                Constructor<InnerClass> ctor = OuterClass.InnerClass.class
                        .getDeclaredConstructor(OuterClass.class);
                // This forces the security manager to allow a call
                ctor.setAccessible(true);
    
                // the call
                try {
                    OuterClass.InnerClass inner = ctor.newInstance(outer);
                    System.out.println(inner);
                } catch (InstantiationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

  •  类似资料:
    • 问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:

    • 我尝试实例化以下Java代码中定义的内部类: 我得到了这个例外: 我错过了什么?

    • 我在使用reflections api的公共类中的私有类中使用私有方法时遇到问题。下面是一个简化的代码示例: 同样,我希望能够实例化一个类对象,然后从私有类调用。我一直试图通过反射来做到这一点,但我似乎无法超过1级。此外,内部类可能有也可能没有大多数代码似乎使用的构造函数。上面的代码只是框架。 我当前的代码: 我查找了各种方法来获取内部类或私有方法,但找不到在不使用构造函数的情况下将外部对象获取到

    • 我不能创建B-Object,但为什么呢? 例外情况是:

    • 问题内容: 假设您有一个文本文件,例如: 您希望相应地更新相应的对象: 凡是不同种类的枚举。 我想有一个通用的方法来实例化枚举值。也就是说,在运行时使用反射,而无需事先知道对象的枚举类型。 我会想到这样的事情: 问题是:应该有什么呢?给定其String表示形式,甚至可以实例化未知枚举吗? 问题答案: 之后不应该被调用-它返回实例的类 你可以投,避免一般性的问题,因为你已经知道的是

    • 问题内容: 我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示: 问题是,如果是诸如的内部类,则该方法即使是公共方法也将不起作用,因为它将抛出。 有没有办法动态实例化内部类? 问题答案: 如果它是真正的 内部 类而不是 嵌套 (静态)类,则有一个隐式构造函数参数,它是对外部类实例的引用。在那个阶段您不能使用- 必须获得适当的构造函数。这是一个例子: