2014-07-10 2 views
10

null로 주석을 기본으로 지정할 수 있습니까?주석 기본값 "null"값

내가 달성하고 싶은 것은 선택적 주석 속성과 같은 것입니다. 예를 들어

public @interface Foo { 

    Config value(); 

} 


public @interface Config { 

    boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

내가 @foo를 사용하고 싶습니다 (값을 지정하지 않고, 그래서 선택의 어떤 종류이어야 함) 나는이 같은 것을 쓸 수 있도록하고 싶습니다 :

@Foo (
    @Config(
     ignoreUnknown = true, 
     steps = 10 
    ) 
) 

특수 효과를 사용하여 이와 같은 작업을 수행 할 수 있습니까?

나는이 공공 @interface 푸 {같은 것을하고 싶지 않아

boolean ignoreUnknown() default false; 
    int steps() default 2; 
} 

나는 속성이 설정 여부 (그리고 그것이을 가지고 있지 않은 경우되었는지 여부를 구별 할 수 있기를 원하기 때문에 기본값 또는하지 않음).

설명하기가 조금 복잡하지만 Java 코드를 생성하는 Annotation Processor를 사용하고 있습니다. 그러나 런타임에 @Config를 사용하여 자체 구성을 설정 한 사람들을 제외하고 모든 @Foo에 사용해야하는 기본 구성을 설치하고 싶습니다.

그래서 내가 원하는이 같은 것입니다 :

public @interface Foo { 

     Config value() default null; 

} 

그러나 지금까지의 내가 바로 그 불가능을 알고? 아무도 그러한 선택적 속성에 대한 해결책을 알고 있습니까?

+0

가능한 중복 http://stackoverflow.com/questions/1178104/error-setting-a-default- null-value-for-annotations-field) – fracz

답변

16

아니요, null을 주석 속성 값으로 사용할 수 없습니다. 그러나 배열 유형을 사용하고 빈 배열을 제공 할 수 있습니다.

public @interface Foo { 
    Config[] value(); 
} 
... 
@Foo(value = {}) 

또는

public @interface Foo { 
    Config[] value() default {}; 
} 
... 
@Foo 
([주석의 필드에 대한 기본 null 값을 설정 오류]의
+0

네,하지만 항상 @Foo (value = {})를 써야하고 90 %는 다른 Configuration을 제공하고 싶지 않기 때문에 '@ Foo' 만 가지고 싶다. – sockeqwe

+1

@sockeqwe'default {}'를 설정하는 것만 큼 쉽다. –

+0

아, 맞아 ... 좋아! 고맙습니다! 나는 5 분 안에 대답을 받아 들일 것이다. (Stackoverflow는 대답을 받아 들일 때까지 5 분을 기다려야한다고 말한다) – sockeqwe