想象一下,我们在包下面的类:User.java
:src/service/model
我们可以得到package(src/service/model
)annotations使用User.class.getPackage().getAnnotaions();
然后我们如何获得父程序包(src/service
)注释。
我不知道如何在跳过级别获得包装注释。
您可以获取应用程序中的所有软件包,然后过滤所需的软件包以获取Annotations
:
String userPackName = User.class.getPackage().getName(); // src.service.model
int lastIndex = userPackName.lastIndexOf(".");
String parentPackName = userPackName.substring(0, lastIndex); // src.service
Annotation[] annotations = Arrays.stream(Package.getPackages())
.filter(pack -> pack.getName().equals(parentPackName))
.findFirst()
.map(Package::getAnnotations)
.orElseGet(() -> new Annotation[0]);
,但Package.getPackages()
仅返回current class loader
中定义的软件包(根软件包(src / service)中的所有类均由current class loader
加载)。
java.lang.Package
代码段:
@CallerSensitive
public static Package[] getPackages() {
ClassLoader cl = ClassLoader.getClassLoader(Reflection.getCallerClass());
return cl != null ? cl.getPackages() : (Package[])BootLoader.packages().toArray((x$0) -> {
return new Package[x$0];
});
}
/** @deprecated */
@CallerSensitive
@Deprecated(
since = "9"
)
public static Package getPackage(String name) {
ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass());
return l != null ? l.getPackage(name) : BootLoader.getDefinedPackage(name);
}