getAnnotations()为空,无法按预期工作

时间:2018-05-16 21:39:39

标签: java annotations

我期待这段代码:

import java.util.Arrays;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface Sometation {}


public class Test {
    @Sometation
    public static void main(String[] args) {
     System.out.println(Arrays.toString(Test.class.getAnnotations()));
     System.out.println(Arrays.toString(Test.class.getDeclaredAnnotations()));
    }

}

导致至少一个非空数组。而是导致

[]
[]

这发生在eclipse和我在终端中运行时。我正在运行'java-8-openjdk-amd64'(由apt在UbuntuMATE 16.04上安装)。

1 个答案:

答案 0 :(得分:2)

您已注释main() 方法,而不是Test类。班级Test没有注释。要查看您添加的注释,您需要先获取方法,然后使用Method#getDeclaredAnnotations()。像(未经测试)的东西:

Test.class.getMethod("main", String[].class).getDeclaredAnnotations()

或者,您可以将注释放在类上:

@Sometation
public class Test { ... }

然后您的原始代码应显示一些非空数组。