2014-07-11 7 views
0

입력으로 여러 클래스를 받아 들일 수있는 주석을 만들려고합니다. 일반적인 사용은 내가 전제 조건 주석에 허용 된 유형을 제한 할여러 바인딩 된 제네릭 클래스 인수로 주석을 만들 수 없습니다.

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

아래와 같이이를 위해

@Prerequisites{FirstPrerequisite.class, SecondPrerequisite.class} 

내가 주석을 만들 수있을 것이다. 그러나 내가 같은 것을주는 경우 public Class<? extends Dependency>[] value(); 문제가 My FirstPrerequisite이고 SecondsPrerequisite가 동일한 유형에서 확장 될 수 있습니다. 다음과 같은 시도했지만 아무도 작동하는 것, 그들은 컴파일 오류를 제공하고 있습니다.

public Class<? extends Dependency & TestCaseStep>[] value(); 
public Class<? extends Dependency , TestCaseStep>[] value(); 
public Class<T extends Dependency & TestCaseStep>[] value(); 

제네릭에서 두 가지 유형의 입력을 가져 오는 방법은 무엇입니까?

답변

0

하나의 옵션은 마커 인터페이스를 만들고 클래스가 인터페이스를 구현하도록하는 것입니다. 그러면 해당 인터페이스 유형으로 바인딩을 제공 할 수 있습니다.

또 다른 대안은 컴파일 타임 대신에 런타임에 제한 조건 검사를 단순히 이동하는 것입니다. 주석 처리기에서 제공된 Class 인수의 유효성을 검사하도록합니다.

+0

두 번째 옵션은 내가 과거에 만든 두 가지 유형으로 작업해야하기 때문에 나를위한 것입니다. 나는 함께 가져와야합니다. 감사. – Buddha