Sar*_*els 2 java generics annotations raw-types java-5
我正在使用JPA 2并具有以下方法:
private static void wipeTable(EntityManager em, Class<? extends Table> klass) {
String tableName = klass.getAnnotation(Table.class).name();
...
}
Run Code Online (Sandbox Code Playgroud)
我认为Class<? extends Table>参数存在问题.我有一个像这样的实体类:
@Entity
@Table(name = "collections")
public class Collection extends MyOtherClass implements Serializable { ... }
Run Code Online (Sandbox Code Playgroud)
我可以做得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();
Run Code Online (Sandbox Code Playgroud)
这导致我的IDE建议:
类是原始类型.应参数化对泛型类的引用
我正在使用Java 1.5.有没有办法说"给我一个Class注释类型的参数@Table"?
我理解你要完成的是什么,但是意识到Collection没有扩展Table,它有一个Table注释.将您的签名更改为以下内容:
private static <T> void wipeTable(EntityManager em, Class<T> klass)
Run Code Online (Sandbox Code Playgroud)
关于第二点,在传递Class参数时,无法对其进行限制以获得特定的注释.但是您可以检查方法中是否存在注释:
Table tableAnnotation = klass.getAnnotation(Table.class);
if(tableAnnotation != null) {
// logic here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6401 次 |
| 最近记录: |