如何注释 java 包并反映元数据

How to annotate java package and reflect metadata

我想使用简单注释来注释 java 包:

@Target(ElementType.PACKAGE)
public @interface Related {
    int apiVersion() default 0;
}

但是当我尝试将它添加到任何包时我遇到了编译错误

Error:(1, 14) java: cannot find symbol
  symbol:   class Related
  location: package com.test.xxx

感谢任何帮助!

编辑

搜索了一下我也发现了这种错误

Error:(1, 1) java: package annotations should be in file package-info.java

为了能够在包上放置注释,您应该创建 package-info.java 文件,其中应包含如下包定义:

@Related
package tld.some.name;

为了能够反射反射包你还需要设置RetentionPolicy.RUNTIME

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface Related {
    // stuff...
}

然后终于可以反映包了:

SomeClassInPackage.class.getPackage().getAnnotation(Related.class)

您也可以使用 java.lang.Package

按名称反映包
Package.getPackage("tld.some.name").getAnnotation(Related.class)