是否有任何java注释用于向字段添加额外信息?

Bob*_*obs 2 java annotations metadata

是否有任何java注释用于向类的字段添加额外信息?

我需要类似以下示例的内容,以便在运行时通过反射访问:

public class A
{
   @Description("my field")
   public String name = "";
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

自己写这样的东西并不难.例如:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
    String value() default "";
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

public class MyClass {

    @Description("my field")
    private String name = "";
}
Run Code Online (Sandbox Code Playgroud)

得到value:

Field nameField = MyClass.class.getDeclaredField("name");
Description d = nameField.getAnnotation(Description.class);
System.out.println(d.value()); // Prints "my field"
Run Code Online (Sandbox Code Playgroud)

关键部分:

  • 请注意,这value是一个特殊属性.它不需要您指定名称.如果你没有使用value,你必须做更多的事情@Description(desc = "my field")并直接引用它的名字.
  • default指定默认值.这里没有多大意义,但知道它很有用.这意味着您可以在@Description没有value指定的情况下进行编写,这将是合法的.value()在这种情况下,调用将返回空字符串,因为这是默认值.如果未指定默认值,则需要提供值.
  • @Target用于指定可以使用注释的元素类型.在这种情况下,我们只指定FIELD.
  • @Retention指定它保持多长时间以及是否可以访问它.SOURCE意味着它在编译后丢失了.当您只需要它进行注释处理时,这非常有用.CLASS意味着它存储在字节码中,但您无法通过反射访问它.RUNTIME是相同的CLASS,除了你可以通过反射访问它.