我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示:
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如何解决这个问题: