0

私はいくつかの機能を持っています...

@Override
public List<ContentType> findAllContentTypes() {
    return this.emf.createEntityManager()
                   .createNamedQuery("ContentType.findAll", ContentType.class)
                   .getResultList();
}

@Override
public List<Status> findAllStatus() {
    return this.emf.createEntityManager()
                   .createNamedQuery("Status.findAll", Status.class)
                   .getResultList();
}

実際、私はこれらのうち約12個を持っており、さまざまな種類のものを取得しています。これらの関数を使用して、これらすべてを置き換える単一の総称関数を作成したいと思います。

これを行うために私が考えることができる最善の方法は、のようなことをすることですfindAll("Language")。私が始めました...

public List<T> findAll(String objectName) {
    return this.emf.createEntityManager()
                   .createNamedQuery(objectName+".findAll", objectName)
                   .getResultList();
}

問題(私のIDEが何をすべきかわからない状態でフィットをスローすることを除いてT)は、その文字列を取得しての代わりに渡す方法がわからないことですContentType.class

Netbeansが認識できないのは何が欠けているのTでしょうか。

objectName2番目のパラメーターとして渡す方法で機能しcreateNamedQuery()ますか?

4

2 に答える 2

4

<T>メソッドが型を返す前に型パラメータリスト(この場合)を追加して、メソッドを汎用として宣言する必要があります。次に、適切なタイプのクラスオブジェクトをパラメータとして渡すだけです。

public <T> List<T> findAll(Class<T> clazz) {
    return this.emf.createEntityManager().createNamedQuery(
            clazz.getSimpleName()+".findAll", clazz).getResultList();
}
于 2012-04-19T19:26:55.657 に答える
2

このような何かがトリックを行う必要があります:

public <T> List<T> findAll(Class<T> klass) {
    return this.emf.createEntityManager().createNamedQuery(klass.getSimpleName()+".findAll", klass).getResultList();
}
于 2012-04-19T19:27:28.207 に答える