2017-08-10 87 views
2

我有如下的自定義註釋:收集與自定義的註釋類型作爲參數

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
@interface CustomAnnotation { 
    String description(); 
    Class type; 
} 

我用它如下:

class MyClass { 

    @CustomAnnotation(description="Some Description", type=MyClass.class) 
    public void someMethod() { 
    } 
} 

不過,我想指定列表的能力的MyClass作爲「類型」,如下所示:

class MyClass { 

    @CustomAnnotation(description="Some Description", type=List<MyClass>.class) 
    public void someMethod() { 
    } 
} 

我認爲這是不可能的。我能做的是,在註釋中添加另一個屬性來指定類型是否爲集合,但是還有其他更好的選擇嗎?我相信沒有,但只是爲了以防萬一有希望。

回答

0

看到Rentention.RUNTIME我假設你要反思這個

List.classList<MyClass>.class指的是同樣的事情在運行時。

記住這一點:

泛型不要在運行時存在。

在運行時,每一個泛型類型鍵入刪除,所以我懷疑,不管你是想在這裏做也許是不可能的。您可以通過在註釋中添加另一個屬性來解決此問題,但不知道您對註釋做了什麼,我不完全確定。您可能想使用反射從List<MyClass>.class獲得MyClass。但讓我告訴你,這是不可能的。

我的建議是隻使用List.class。在運行時,它對列表存儲的對象類型無關緊要。

+0

您應該編輯並提及[Type Erasure](http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)或參考任何文檔,因爲聲明「泛型在運行時不存在」。因爲這不是非常有用的imo。 – Maaaatt