簡體   English   中英

Java-將帶有注釋的類傳遞給泛型方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM