gpt4 book ai didi

java - 使用通用 java 类时出现 InstantiationException

转载 作者:行者123 更新时间:2023-12-01 22:05:02 28 4
gpt4 key购买 nike

我想创建一个包含实体的模拟。可以有两种实体:复杂实体和简单实体。当我实例化一个简单的模拟时,我希望实例化简单的实体,当我实例化一个复杂的模拟时,我希望实例化复杂的实体。

实体:

class ComplexEntity extends Entity {
public ComplexEntity(){}
}

class SimpleEntity extends Entity {
public SimpleEntity(){}
}

class Entity {
public Entity(){}
}

模拟:

class ComplexSimulation extends Simulation<ComplexEntity>
{

public ComplexSimulation() throws InstantiationException, IllegalAccessException {
super(ComplexEntity.class);
}

}

class SimpleSimulation extends Simulation<SimpleEntity>
{
public SimpleSimulation() throws InstantiationException, IllegalAccessException
{
super(SimpleEntity.class);
}
}

class Simulation<E extends Entity> {
protected final E entity;

public Simulation(Class<E> class1) throws InstantiationException, IllegalAccessException
{
entity = class1.newInstance();
}
}

问题是当我尝试构建 ComplexSimulation 时:

ComplexSimulation c = new ComplexSimulation();

我收到以下 InstantiationException:

java.lang.InstantiationException: test.Test$ComplexEntity
at java.lang.Class.newInstance(Unknown Source)
at test.Test$Simulation.<init>(Test.java:55)
at test.Test$ComplexSimulation.<init>(Test.java:37)
at test.Test.go(Test.java:12)
at test.Test.main(Test.java:6)
Caused by: java.lang.NoSuchMethodException: test.Test$ComplexEntity.<init>()
at java.lang.Class.getConstructor0(Unknown Source)

零参数构造函数不可能是问题,因为我的实体有它们......有人知道问题是什么吗?

最佳答案

问题是您正在使用内部类。如果没有外部类的实例,则无法创建内部类的实例,即使您调用 Class<InnerClass>.newInstance() 也是如此。 .

只需使这些内部类成为顶级类,您的示例就应该按预期工作。

如果您确实想要/需要使用反射初始化非静态内部类,请参见此处:How to instantiate inner class with reflection in Java?

关于java - 使用通用 java 类时出现 InstantiationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32953192/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com