2016-09-28 4 views
2

동일한 타겟에 중복 된 주석을 적용 할 수 없기 때문에 이에 대한 해결 방법을 찾고 있습니다. 내가 필요로하는에 가능성이 뭔가 :복수 주석

@Parent(sex="F", name="Alice") 
@Parent(sex="M", name="Bob") 
@Sibling(sex="M", name="Charlie") 
@Sibling(sex="M", name="Dan") 
@Sibling(sex="F", name="Eve") 

그래도 상대 주석의 배열로 값 멤버를 모두 포함하는 다른 주석 @Relatives를 추가 선언했습니다.

@Relatives({ 
    @Parent(sex="F", name="Alice") 
    @Parent(sex="M", name="Bob") 
    @Sibling(sex="M", name="Charlie") 
    @Sibling(sex="M", name="Dan") 
    @Sibling(sex="F", name="Eve") 
}) 

@Parent와 @Sibling @interfaces가 @Relative 수퍼 클래스를 확장 할 수 없기 때문에 그런 배열을 정의 할 수 없습니다.

두 개의 다른 배열 Sibling [] 형제와 Parent [] 부모를 정의하는 것 외에 다른 방법이 있습니까? 그러나, 당신은 반복 주석의 절반 구운 방법이 1.8에서

@Relatives(
    parents={ 
     @Parent(sex="F", name="Alice"), 
     @Parent(sex="M", name="Bob") 
    } 
    siblings={ 
     @Sibling(sex="M", name="Charlie") 
     @Sibling(sex="M", name="Dan") 
     @Sibling(sex="F", name="Eve") 
    } 
) 
+0

"Repeating Annotations" on Oracles site 당신이 사용할 수있는 어떤 자바 버전? –

+0

1.6 :(하지만 최신 VM에도 관심이 있습니다. –

+0

저에게 잘 보입니다.) Java 세계에 오신 것을 환영합니다. BTW, 자바 8 동일한 유형의 여러 주석 존재를 허용합니다. 최신 버전으로 마이그레이션 할 수 있는지 여부를 확인해야합니다. – SimY4

답변

0

같은 것을 만드는 비결은 여전히 ​​@Parents 및 @Siblings를 선언해야 할 것입니다 java.lang.annotation.Repeatable를 볼 수 있지만 것 :

    , 당신이 그들의 포함 된 주석 ( @Parents 및내부에 반복 주석을 찾을 수 있습니다 (introspecting) 그들을 위해 스캔 할 때
  1. 을 사용하여 포함 된 주석

  2. 를 생략 할 수 있습니다).

 
    public @interface Parents { 
     Parent[] value(); 
    } 

    // this says: will be repeated inside a `Parents` nest 
    @Repeatable(Parents.class) 
    public @interface Parent { 
     String name(); 

     String sex() default "F"; 
    } 

당신은

@Parent(sex="F", name="Alice"), 
@Parent(sex="M", name="Bob") 
Child firstChild; 

또한보십시오