2013-07-13 3 views
2

는 나는 현재이 주석이 정의 :제네릭 정보를 유지하는 @Documented 주석을 만드는 방법은 무엇입니까?

@Needs({SomeClass.class, OtherClass.class}) 

내가 예를 들어, 수행 할 수 없습니다 :

@Needs(Map<String, SomeClass>) 

목적은이다

@Documented 
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.SOURCE) 
@Beta 
public @interface Needs 
{ 
    Class<?>[] value(); 
} 

문제는 내가 할 수있는 동안이다 위와 같이 제네릭 정보를 문서화하고 보관하십시오. 가능한가?

답변

2

Java 언어 사양 writes :

주석 형에 선언 된 메서드의 반환 형식은 다음 중 하나가 아닌 경우는 컴파일 타임 오류가

: 기본 유형을, 문자열, 클래스, 클래스의 매개 변수화 된 호출, 열거 형 (§8.9), 주석 유형 또는 요소 유형이 앞의 유형 중 하나 인 배열 유형 (§10)

이 제한의 이유는 주석 값이 컴파일 타임에 평가되고 값만 저장된다는 것입니다. 따라서 이러한 값은 클래스 파일에 저장하는 방법이 명확하지 않으므로 임의의 객체가 될 수 없으며 런타임에이를 언 마샬링합니다. 하지만, 견적에 뭔가 나를 틱)

public @interface Needs { 
    Need[] value(); 
} 

public @interface Need { 
    String key(); 
    Class value(); 
} 

당신이 다음

@Needs([ 
    @Need(key = "aKey", value = A.class) 
    @Need(key = "anotherKey", value = Another.class) 
]) 
+1

내가 제한에 대해 알고처럼 사용할 수 있습니다 : "어떤 매개 변수

일반적인 솔루션은 중첩 된 주석 트릭 클래스의 호출 "<- 그게 뭐야? – fge

+0

나는 이것을'Class 를 확장합니다. – meriton

관련 문제