具有多个参数的注释定义

时间:2017-11-26 05:21:06

标签: java annotations

定义中有两个参数valueoptional。 但在使用中,只有一个参数,所以我有两个问题:

  1. 如果使用的参数少于定义,参数名称不存在,如何确定使用哪一个?

  2. 在上面的代码中,value是一个数组类型,但AuthRequired.AuthType.Server是一个元素,它们如何匹配?

  3. 有一个注释定义:

    Java代码:

    @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;
    
    }
    

    及其用法:

    Java代码:

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

1 个答案:

答案 0 :(得分:0)

  1. 如果未指定参数名称,则始终使用value参数。如果您指定单个参数,这也是合法的。否则,您需要为每个参数使用<parameterName>=<value>
  2. 除了使用{}括号表示法指定单个元素数组外,您还可以简单地编写元素。 @AuthRequired(value=AuthRequired.AuthType.Server)相当于@AuthRequired(value={AuthRequired.AuthType.Server})