当前位置: 首页 > 面试题库 >

实例化内部类

柴坚诚
2023-03-14
问题内容

我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示:

public static <A extends Foo> List<A> getFooList(Class<A> clazz) {
   List<A> returnValue = new ArrayList<A>();
   for(int i=0; i < 5; i++) {
        A object = clazz.newInstance();
        returnValue.add(object);
   }

   return returnValue;
}

问题是,如果clazz是诸如的内部类Foo.Bar.class,则该newInstance()方法即使Bar是公共方法也将不起作用,因为它将抛出java.lang.InstantiationException

有没有办法动态实例化内部类?


问题答案:

如果它是真正的 内部 类而不是 嵌套
(静态)类,则有一个隐式构造函数参数,它是对外部类实例的引用。Class.newInstance在那个阶段您不能使用-
必须获得适当的构造函数。这是一个例子:

import java.lang.reflect.*;

class Test
{
    public static void main(String[] args) throws Exception
    {
        Class<Outer.Inner> clazz = Outer.Inner.class;

        Constructor<Outer.Inner> ctor = clazz.getConstructor(Outer.class);

        Outer outer = new Outer();
        Outer.Inner instance = ctor.newInstance(outer);
    }
}

class Outer
{
    class Inner
    {
        // getConstructor only returns a public constructor. If you need
        // non-public ones, use getDeclaredConstructors
        public Inner() {}
    }
}


 类似资料:
  • 实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下: 上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1) 在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。 2)在实例内部类中,可以访问外部类的所有成员。 提示:如果有多层嵌套,则内部类可以访问所有外部类的成员。 3)在外部类中不能直接访问内部类的成员,而必

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

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

  • 问题内容: 我没有想到在这个阶段我会再遇到Java根本上没有的新语法,但是瞧,我只是遇到了一些东西: 确切的上下文和下面的代码应该做什么无关紧要-只是为了提供某种上下文。 我试图在IT Mill Toolkit中综合创建一个事件,所以我写了这样的话: 但是,Eclipse给了我以下错误消息: 无法访问Button类型的封闭实例。必须使用一个封闭的类型为Button的实例来限定分配(例如xxnew

  • 我想在不涉及主Spring配置的情况下,为我的DAO层运行JUnit测试。因此,我声明了一个用配置注释的内部类,这样它就会覆盖用SpringBootApplication注释的主应用程序类的配置。 这是代码: 但是我得到了错误:

  • 有内在的 科特林拥有的: Java如何解决这个问题: