2013-09-27 3 views
0

클래스에서 익명 클래스 인 여러 필드가 있습니다. 그들 중 일부는 주석이 있습니다. 예를 들면 다음과 같습니다.필드의 주석을 직접 가져 오기

public class MainClass { 

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

    Interface Test {...} 

} 

나는 MainClass.class.getField를 ("t") 수행하여 t의 주석을 볼 수 있습니다 getAnnotations()를 알고,하지만 난 참조하여 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

익명의 클래스에서 고유 한 주석을 볼 수있는 방법이 있을까요? public static Test t = new Test() {... this.getClass(). doSomething} 같은 것이 있습니까? – codebreaker

+0

@ user1940121 익명 클래스에 인스턴스 필드가있는 경우 평소와 같은 방법으로 액세스 할 수 있습니다. 귀하의 예를 들어, 't.getClass(). getField (...)'. 해당 필드는 익명 클래스 (인스턴스)에만 속합니다. –

1

Test이 인터페이스이며 구현 클래스의 주석을 원한다고 생각합니다. 당신이 그들로부터 주석을받을 모든 필드를 얻을 수 test.getClass().getFiels()을 사용할 수있는 원인

for (Test test : c) { 

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

} 

. 정말로에 달려 있습니다.

관련 문제