2017-11-26 6 views
0

valueoptional의 두 매개 변수가 정의에 있습니다. 하지만 난 두 가지 질문이 있으므로 사용에, 하나의 매개 변수가 : 정의에 비해 사용량이 적은 매개 변수가있는 경우여러 매개 변수가있는 주석 정의

  1. 을하고, 매개 변수 이름이 존재하지 않는, 어떻게 사용되는 일 결정 ?

  2. 위의 코드에서 값은 배열 유형이지만 AuthRequired.AuthType.Server은 어떤 요소입니까?

    자바 코드 :

주석 정의가

@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface AuthRequired { 
    enum AuthType { 
     Server(null), 
     Student(UserType.Student), 
     Teacher(UserType.Teacher), 
     SchoolMaster(UserType.SchoolMaster), 
     Operator(UserType.Operator); 

     private UserType userType; 

     AuthType(UserType userType) { 
      this.userType = userType; 
     } 

     public UserType getUserType() { 
      return userType; 
     } 
    } 

    AuthType[] value() default {}; 

    boolean optional() default false; 

} 

그리고 그것의 사용 :

자바 코드 :

@AuthRequired(AuthRequired.AuthType.Server) 
@RequestMapping(method = RequestMethod.GET, value = "/isUserSlaveOf") 
boolean isUserSlaveOf(
@RequestParam String slaveUserIds, 
... 
... 
+0

유형별로 일치합니다. – janos

+0

필드 이름이 없을 수있는 유일한 방법은 필드 이름이 '값'인 경우입니다. 다른 모든 필드의 이름을 지정해야합니다. 특별한 이름'value'는 "default"입니다. – Itai

+1

https://docs.oracle.com/javase/tutorial/java/annotations/index.html –

답변

0
  1. 매개 변수 이름을 지정하지 않으면 항상 사용되는 value 매개 변수입니다. 또한 단일 매개 변수를 지정하는 경우에만 유효합니다. 그렇지 않으면 각 매개 변수에 <parameterName>=<value>을 사용해야합니다.
  2. {} 대괄호 표기법을 사용하여 단일 요소 배열을 지정하는 대신 요소를 쓰는 것만 허용됩니다. @AuthRequired(value=AuthRequired.AuthType.Server)@AuthRequired(value={AuthRequired.AuthType.Server})과 같습니다.