我们如何获得父包注释?有人提供示例吗?
How can we get parent package annotations?Anyone offer an example?
假设我们有一个 class:User.java
下面的包: src/service/model
并且我们可以获得 包 (src/service/model
) 注释
使用 User.class.getPackage().getAnnotaions();
那我们如何获取父包 (src/service
) annotations.
我不知道如何在跳过级别中获得包注释。
您可以获取应用程序中的所有包,然后过滤所需的包以获取 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()
只会 return 在 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[=11=]) -> {
return new Package[x[=11=]];
});
}
/** @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);
}
假设我们有一个 class:User.java
下面的包: src/service/model
并且我们可以获得 包 (src/service/model
) 注释
使用 User.class.getPackage().getAnnotaions();
那我们如何获取父包 (src/service
) annotations.
我不知道如何在跳过级别中获得包注释。
您可以获取应用程序中的所有包,然后过滤所需的包以获取 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()
只会 return 在 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[=11=]) -> {
return new Package[x[=11=]];
});
}
/** @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);
}