1

次の抽象クラスがあります。

public abstract class AbstractRepository<O, PK extends Serializable>{

protected EventDispatcher eventDispatcher;

protected GenericDao<O,PK> dao;

protected ApplicationPublisher publisher;

protected State state;

protected InternalPublisher internalPublisher;

@PostConstruct
private void initialise(){
    eventDispatcher.addHandler(this);
}

protected <T extends GenericDao<O,PK>> AbstractRepository(T dao, State state, ApplicationPublisher publisher, InternalPublisher internalPublisher, EventDispatcher eventDispatcher){
    this.dao = dao;
    this.state = state;
    this.publisher = publisher;
    this.internalPublisher = internalPublisher;
    this.eventDispatcher = eventDispatcher;
}


@HandleEvent
private void handleDataContributorCreatedEvent(DataContributorDeletedEvent event){

    List<O> stats = new ArrayList<O>();

    for(int x = -1 ; x < 50 ; x++){

        for (int y = 0 ; y < 360 ; y = y + 5){
            stats.add(**Need to instantiate paramater type O here**);
        }   

    }
    dao.save(stats);
}

}

イベント ハンドラー メソッド内で、パラメーター タイプ O のインスタンスを作成できるようにしたいのですが、これを行う方法がわかりません。最善のアプローチに関するヘルプをいただければ幸いです。

4

3 に答える 3

0

Javaの型消去のため、これを行うことはできません。O基本的に、実行時にパラメーターのクラスを知る方法はありません。

@pescis が提案したように、この問題を解決する方法を説明します

于 2013-04-16T12:45:03.747 に答える
0

パラメータを受け入れるコンストラクタを作成する必要があります

Class<O> class

オブジェクトはそれを保存し、必要なときに使用します

class.getConstructor() and constructor.newInstance 

リフレクション API のメソッド。これは、ジェネリック型がコンパイル時にのみ存在するためです。バイトコードでは、それらはすべて単なるオブジェクトです。

于 2013-04-16T12:55:22.863 に答える
0

次のような List インスタンスを使用してみることができます。

Class<?> clazz = (Class<?>) stats.getGenericInterface()[0];

その後、できますclazz.newInstance()

免責事項:テストされていませんが、どこかでそれが機能することを読んだことがあると確信しています.

于 2013-04-16T13:02:56.823 に答える