2010-08-04 5 views
3

제목이 잘못되었지만 요구 사항이 아래인지 확실하지 않습니다.Java의 형식 보증 열거 형

커스텀 어노테이션에 입력으로 문자열 값을 사용해야합니다. 열거 형 값을 사용할 때 IDE는

Java 속성 값이 일정해야합니다.

@test("test") // works 

@test(Const.myEnum.test.toString()) //java attribute value must be constant 

나는 불변 인 문자열 값의 중요성에 대해 읽어보십시오. 열거 형 (public static final String Hack이 아님)을 통과하는 것이 가능합니까?

감사합니다.

답변

1

주석이 사용자의 제어 범위 내에있는 경우 String 대신 enum 유형의 속성 유형을 지정하십시오. 그렇지 않으면 불가능합니다.

또한, 주석, 모든 자바 클래스와 같이, 상부 케이스 (즉 Test하지 test)으로 시작해야

열거 형 주석이 사용될 수있다
// retention, target here 
public @interface Test { 
    YourEnum value(); 
} 
+0

감사합니다. 주석의 정의를 변경할 수 없으므로 사용이 불가능하다고 단언했습니다. 자세한 예제는 – bsr

0

annotation 매개 변수를 열거 형의 값으로 제한하려면 해당 유형을 String이 아닌 매개 변수에 지정하십시오. 열거 형은 열거 형이며 "toString"을 호출하는 것이 "상수"변환이 아니라는 사실을 알 수 없습니다.

0

매개 변수는 방법의 결과, 즉 toString()

이 아니어야하지만 당신은 열거 형 상수를 사용할 수 있어야합니다.

6

. 이처럼 수행해야합니다

@test(Const.myEnum.test) 

이 같은 열거 정의 가정 :

package Const; 

public enum myEnum { 
    test; 
} 

과 같은 주석 :

public @interface test { 
    myEnum value(); 
} 
3

어떤 문제가 안을 enum을 사용하는 경우 문제를 신고하는 방법이나 주석을 첨부하는 방법이있을 수 있습니다. 다음은 문제없이 컴파일하는 예제입니다.

@Retention(RetentionPolicy.RUNTIME) 
@Target({ ElementType.METHOD }) 
public @interface MyAnnotation { 

    MyEnum value(); 

    public enum MyEnum { 
     ONE, TWO, THREE, FOUR 
    } 
} 

public class AnnotationTest { 

    @MyAnnotation(MyEnum.ONE) 
    public void someMethod() { 
     //... 
    } 

} 
+0

+1입니다. 감사합니다. – bsr