0

エンティティを含むシミュレーションを作成したいと考えています。エンティティには、複雑なものと単純なものの 2 種類があります。単純なシミュレーションをインスタンス化するときは、単純なエンティティをインスタンス化する必要があり、複雑なシミュレーションをインスタンス化するときは、複雑なエンティティをインスタンス化する必要があります。

エンティティ:

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)

私のエンティティにはゼロ引数コンストラクターがあるため、ゼロ引数コンストラクターは問題になることはありません...問題が何であるかを知っている人はいますか?

4

1 に答える 1