2013-09-27 28 views
0

在一個類中,我有幾個匿名類的字段。其中一些人有註釋。例如:直接獲取字段的註釋

public class MainClass { 

    @Annotation 
    public static Test t = new Test() {...} 

    Interface Test {...} 

} 

我知道我可以做MainClass.class.getField(「T」)查看T的註解getAnnotations(),但有什麼辦法,我可以通過引用得到T的註解。 T'例如,如果我有一組測試,我可以通過遍歷它們來查看它們的註釋嗎?

Collection<Test> c; 
... 
// MainClass.t is in collection c 
... 

for (Test test : c) { 

    // get annotation of test 

} 

我猜這是不可能的,如果不是,最好的辦法是什麼來接近我想要做的?

回答

1

引用只是指向一個對象,而對象沒有任何註釋。一個字段(方法,類,參數等)。所以,不,這是不可能的。

接近我想要做的最好方法是什麼?

沒有。

public void someMethod() { 
    Test test = MainClass.t; 
    // some more 
} 

MainClass.tField。局部變量test就是這樣一個局部變量。

請注意,您可以註釋局部變量

public void someMethod() { 
    @SomeAnnotation 
    Test test; 
} 

@Target(value = { ElementType.LOCAL_VARIABLE }) 
public @interface SomeAnnotation { 

} 

,但沒有辦法來檢索註釋。它主要由IDE使用,例如@SuppressWarnings

+0

是否有任何方法可以讓匿名類的字段看到自己的註釋?像公共靜態測試t =新的測試(){... this.getClass()。doSomething}? – codebreaker

+0

@ user1940121如果您的匿名類有一個實例字段,您可以像平常一樣進行訪問。用你的例子,'t.getClass()。getField(...)'。該字段只能屬於匿名類(實例)。 –

1

我猜Test是一個接口,你想要實現類的註釋。

for (Test test : c) { 

    test.getClass().getField("xx").getAnnotations() 

} 

原因,你可以使用test.getClass().getFiels()來獲取所有字段,然後從他們那裏得到的註解。取決於你想要做什麼真的