2016-09-14 4 views
0

에 나는 주석해결 AliasFor 주석 값 프로그래밍 방식으로 봄

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface A { 
    Class<?> value(); 
} 

과 내가이있는 경우 클래스

@B(D.class) 
public class C implements D { 
} 

에 사용되는 @AliasFor

@A (Void.class) 
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface B { 

    @AliasFor(annotation = A.class) 
    Class<?> value(); 
} 

를 사용하는 다른 주석에게 있습니다 C의 인스턴스는 어떻게 프로그래밍 방식으로 해결할 수 있습니까? A.value() ~ Class<D>? AnnotationUtils으로 주석을 합성하려고하지만 값을 검색 할 때 계속해서 Class<Void>이 표시됩니다.

답변

0

일부 파고 들자 대답은 잘못된 클래스를 사용했다는 것입니다. AnnotationUtils 대신 AnnotatedElementUtils을 사용하면됩니다.

@Test 
public void shouldFindAliasedValue() { 

    Class<?> actual = AnnotatedElementUtils.findMergedAnnotation(C.class, A.class).value(); 

    then(actual).isEqualTo(D.class); 
}