是否有任何 java 注释用于向类的字段添加额外信息?
我需要类似以下示例的内容,以便在运行时通过反射访问:
public class A
{
@Description("my field")
public String name = "";
}
是否有任何 java 注释用于向类的字段添加额外信息?
我需要类似以下示例的内容,以便在运行时通过反射访问:
public class A
{
@Description("my field")
public String name = "";
}
自己写这样的东西并不难。例如:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
String value() default "";
}
然后使用它:
public class MyClass {
@Description("my field")
private String name = "";
}
并获得value
:
Field nameField = MyClass.class.getDeclaredField("name");
Description d = nameField.getAnnotation(Description.class);
System.out.println(d.value()); // Prints "my field"
关键部分:
value
是一个特殊属性。它不需要您指定名称。如果您不使用value
,则必须做一些类似@Description(desc = "my field")
的事情并直接引用它的名称。default
指定默认值。在这里没有多大意义,但知道它很有用。这意味着您可以@Description
在没有value
指定的情况下编写,这将是合法的。在这种情况下,调用value()
将返回空字符串,因为这是默认值。如果您没有指定默认值,那么您需要提供一个值。@Target
用于指定注释可以用于哪种元素。在这种情况下,我们仅指定FIELD
.@Retention
指定它保留多长时间以及是否可以访问它。SOURCE
表示编译后丢失。当您只需要它进行注释处理时,这很有用。CLASS
表示它存储在字节码中,但您无法通过反射访问它。RUNTIME
与 相同CLASS
,只是您可以通过反射访问它。