Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 批注参数-字符串[]类型参数设置为字符串文字_Java_Annotations_Variadic Functions - Fatal编程技术网

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”放在其中,或者对于空数组,
{}