Bob*_*obs 2 java annotations metadata
是否有任何java注释用于向类的字段添加额外信息?
我需要类似以下示例的内容,以便在运行时通过反射访问:
public class A
{
@Description("my field")
public String name = "";
}
Run Code Online (Sandbox Code Playgroud)
自己写这样的东西并不难.例如:
@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,除了你可以通过反射访问它.| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |