3

我正在使用 JPA 2 并具有以下方法:

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>)

我尝试只使用参数 be Class klass,没有泛型:

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

这导致我的 IDE 建议:

类是原始类型。对泛型类的引用应该被参数化

我正在使用 Java 1.5。有没有办法说“给我一个Class带注释的类型参数@Table”?

4

1 回答 1

8

我了解您要完成的工作,但意识到 Collection 没有扩展 Table,它上面有一个 Table 注释。将您的签名更改为以下内容:

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

至于您的第二点,在传递您的 Class 参数时无法对其进行限制以具有特定的注释。但是您可以检查方法中是否存在注释:

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