我们如何获得父包注释?有人提供示例吗?

问题描述 投票:1回答:1

想象一下,我们在包下面的类:User.javasrc/service/model

我们可以得到packagesrc/service/modelannotations使用User.class.getPackage().getAnnotaions();

然后我们如何获得父程序包src/service注释

我不知道如何在跳过级别获得包装注释

java reflection annotations package
1个回答
0
投票

您可以获取应用程序中的所有软件包,然后过滤所需的软件包以获取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);
}
© www.soinside.com 2019 - 2024. All rights reserved.