Java 批注参数-字符串[]类型参数设置为字符串文字
了解 我有一个查询,查询以下代码:Java 批注参数-字符串[]类型参数设置为字符串文字,java,annotations,variadic-functions,Java,Annotations,Variadic Functions,了解 我有一个查询,查询以下代码: @Unfinished("Just articleware") public @interface Unfinished { public enum Priority {LOW, MEDIUM, HIGH} String value(); String[] owners() default ""; Priority priority() default Priority.MEDIUM; } 应为语法字符串[]所有者()默认值{
@Unfinished("Just articleware")
public @interface Unfinished {
public enum Priority {LOW, MEDIUM, HIGH}
String value();
String[] owners() default "";
Priority priority() default Priority.MEDIUM;
}
应为语法
字符串[]所有者()默认值{}
。Java编译器如何允许string[]
类型参数(owners
)使用字符串文字语法(”
)?注释键owners
的默认值”
创建了一个包含空字符串元素的数组。您还可以在其中放入一个字符串“default”
,这将导致创建一个只有值“default”的数组
或
{}
仅用于空数组(如果需要)
要对此进行测试,您可以使用运行时保留策略将注释标记为:
@Unfinished("Just articleware")
@Retention(RetentionPolicy.RUNTIME) // mark with Runtime retention policy
public @interface Unfinished {
enum Priority {LOW, MEDIUM, HIGH}
String value();
String[] owners() default "";
Priority priority() default Priority.MEDIUM;
}
用这个注释类
@Unfinished(value = "")
public class AnnotatedClass {
public static void main(String[] args) {
System.out.println("");
}
}
然后使用反射获取未完成的
的键的值,如下所示:
public static void main(String[] args) throws Exception {
System.out.println("Testing...");
Class<AnnotatedClass> obj = AnnotatedClass.class;
if (obj.isAnnotationPresent(Unfinished.class)) {
Annotation annotation = obj.getAnnotation(Unfinished.class);
Unfinished unfinished = (Unfinished) annotation;
System.out.println(Arrays.toString(unfinished.owners()));
}
}
publicstaticvoidmain(字符串[]args)引发异常{
System.out.println(“测试…”);
类obj=AnnotatedClass.Class;
if(对象isAnnotationPresent(未完成的类)){
Annotation=obj.getAnnotation(Unfinished.class);
未完成未完成=(未完成)注释;
System.out.println(Arrays.toString(unfinished.owners());
}
}
两种版本均可接受<代码>默认值“类似于默认值{”}
所以默认值是带有一个元素的数组:空字符串。如果设置default{}
,则默认值为空数组。数组中包含空字符串。您也可以将单个字符串“default”放在其中,或者对于空数组,{}
。