[英]Java - passing class with annotation to generic method
我正在使用JPA 2,並且具有以下方法:
private static void wipeTable(EntityManager em, Class<? extends Table> klass) {
String tableName = klass.getAnnotation(Table.class).name();
...
}
我認為Class<? extends Table>
有問題Class<? extends Table>
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類型的方法擦拭表(EntityManager,Class <?extended Table>)不適用於參數(EntityManager,Class <Collection>)
我嘗試僅使參數為Class klass
,而沒有泛型:
private static void wipeTable(EntityManager em, Class klass) {
String tableName = ((Table)klass.getAnnotation(Table.class)).name();
這導致我的IDE建議:
類是原始類型。 泛型類型Class的引用應參數化
我正在使用Java 1.5。 有沒有辦法說“給我一個用@Table
注釋的Class
類型的參數”?
我了解您要完成的工作,但是意識到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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.