可用java注释重载吗?

时间:2013-12-10 09:12:41

标签: java annotations overloading

我定义了一个注释。

@Documented
@Target(value = ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiParameter {
public String name() default "";

public String type() default "";

public String desc() default "";
}

我可以在方法参数声明中使用如上所述的这个注释。

...
@ApiParameter(desc="for desc") String userName,
@ApiParameter(name="for name", desc="for desc") String address,
@ApiParameter(name="for name",type="for type",desc="for desc") Order order
...

我如何使用上述内容?我想避免输入字段名称。

...
@ApiParameter("for desc") String userName,
@ApiParameter("for name", "for desc") String address,
@ApiParameter("for name","for type" "for desc") Order order,
...

Plz帮助〜

1 个答案:

答案 0 :(得分:1)

仅允许使用单元素注释[JLS-9.7.3]

@Identifier ( ElementValue )

作为@Identifier(value = ElementValue)的缩写。

只有当注释类型具有value元素且所有其他元素(如果有)具有默认值时,才能使用单元素注释。

如果您必须避免在注释中使用字段名称,则可以使用单个String[] value()元素创建注释。

public @interface ApiParameter {
    public String[] value();
}

然后将其用作

@ApiParameter({"for name", "for desc"}) String param

但是,我认为这个解决方案比现在的解决方案更不清晰,更容易出错,而且当通过注释访问数组时,你还必须检查数组中是否有正确数量的元素。