Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 - Fatal编程技术网

Java参数注释

Java参数注释,java,annotations,Java,Annotations,在获取方法的参数注释时遇到困难,下面是一个易于测试的演示,欢迎对错误进行任何指导: // Annotation public @interface At {} // Class public class AnnoTest { public void myTest(@At String myVar1, String myVar2){} } // Test public class App { public static void main(String[] args) {

在获取方法的参数注释时遇到困难,下面是一个易于测试的演示,欢迎对错误进行任何指导:

// Annotation
public @interface At {}

// Class
public class AnnoTest {

   public void myTest(@At String myVar1, String myVar2){}
}

// Test
public class App {

    public static void main(String[] args) {

        Class myClass = AnnoTest.class;

        Method method = myClass.getMethods()[0];
        Annotation[][] parameterAnnotations = method.getParameterAnnotations();

        // Should output 1 instead of 0
        System.out.println(parameterAnnotations[0].length);
    }
}

您没有隐式地将
保留设置为Runtime,这样它默认为
@Retention(RetentionPolicy.CLASS)
这表示它在类文件中表示,但在VM中不存在。要使其工作,请将以下内容添加到您的界面:
@Retention(RetentionPolicy.RUNTIME)
作为类注释,然后再次工作!:D


当您进行此操作时,您可能希望将特定的
@Target
仅设置为参数,而不设置为方法/字段/类等。

默认情况下,编译器将注释记录在类文件中,但VM在运行时无需保留注释(正在应用RetentionPolicy.class retention策略)

要更改注释保留的时间,可以使用保留元注释

在您的情况下,您希望使其可用于以反射方式读取,因此您需要它必须使用RetentionPolicy.RUNTIME将注释记录在类文件中,但VM在运行时仍保留该注释

@Retention(RetentionPolicy.RUNTIME)
public @interface At {}

我还建议您指出注释类型At适用的程序元素

在您的情况下,参数注释应该是

 @Target(ElementType.PARAMETER)
这样,编译器将强制执行指定的使用限制

默认情况下,声明的类型可用于任何程序元素:

  • 注释类型-注释类型声明
  • 构造函数-构造函数声明
  • 字段-字段声明(包括枚举常量)
  • 局部变量-局部变量声明
  • 方法-方法声明
  • 包-包声明
  • 参数-参数声明
  • 类型-类、接口(包括注释类型)或枚举声明

你面临什么样的错误?