title: Annotation definition with multiple parameters
body: <p>There are two parameters in the definition, <code>value</code> and <code>optional</code>.
  but in the usage, there is only one parameter, so I have two questions:</p>
  
  <ol>
  <li><p>If there are less parameters in usage than in definition, and the parameter name is absent, how to determine which one is used?</p></li>
  <li><p>In the above code, value is an array type, but <code>AuthRequired.AuthType.Server</code> is an element, how can they match?</p></li>
  </ol>
  
  <p>There is an annotation definition:</p>
  
  <p>Java Code: </p>
  
  <pre><code>@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;
  
  }
  </code></pre>
  
  <p>And its usage:</p>
  
  <p>Java Code: </p>
  
  <pre><code>@AuthRequired(AuthRequired.AuthType.Server)
  @RequestMapping(method = RequestMethod.GET, value = "/isUserSlaveOf")
  boolean isUserSlaveOf(
  @RequestParam String slaveUserIds,
  ...
  ...
  </code></pre>