3

私はJPA2を使用しており、次の方法があります。

private static void wipeTable(EntityManager em, Class<? extends Table> klass) {
    String tableName = klass.getAnnotation(Table.class).name();
    ...
}

パラメータに問題があると思いClass<? extends Table>ます。私は次のようなエンティティクラスを持っています:

@Entity
@Table(name = "collections")
public class Collection extends MyOtherClass implements Serializable { ... }

うまくやれるCollection.class.getAnnotation(Table.class).name()ので、パラメータとして渡せるようにしたいと思いCollectionます。ただし、呼び出すだけwipeTable(em, Collection.class);で次のエラーが発生します。

タイプFetchDataのメソッドwipeTable(EntityManager、Class <?extends Table>)は、引数(EntityManager、Class <Collection>)には適用できません。

Class klassジェネリックスを使用せずに、パラメーターをであるようにしてみました。

private static void wipeTable(EntityManager em, Class klass) {
    String tableName = ((Table)klass.getAnnotation(Table.class)).name();

これにより、IDEは次のことを提案しました。

クラスはrawタイプです。ジェネリック型クラスへの参照はパラメーター化する必要があります

私はJava1.5を使用しています。Class「注釈付きの型のパラメータを教えてください」と言う方法はあります@Tableか?

4

1 に答える 1

8

あなたが達成しようとしていることは理解していますが、Collection は Table を拡張せず、Table 注釈が付いていることに気付きました。署名を次のように変更します。

private static <T> void wipeTable(EntityManager em, Class<T> klass)

2番目のポイントについては、 Class パラメータを渡して特定の注釈を付けるように制限する方法はありません。ただし、メソッドにアノテーションが存在するかどうかを確認できます。

Table tableAnnotation = klass.getAnnotation(Table.class);
if(tableAnnotation != null) {
    // logic here
}
于 2012-01-11T20:49:16.800 に答える