gpt4 book ai didi

java - Class#isAnnotationPresent 不起作用

转载 作者:行者123 更新时间:2023-12-01 14:48:16 26 4
gpt4 key购买 nike

我正在搜索类列表以检查类是否具有注释。这是代码:

                        if (clazz.getAnnotations().length > 0){
System.out.println(clazz.getAnnotations()[0]);
}
if (clazz.isAnnotationPresent(Manifest.class)){
System.out.println(clazz.getName());
}

第一个 if 语句仅用于调试。一类打印:

@bot.script.Manifest(description=test, version=1.0, name=test)

这与Manifest.class完全相同,但为什么clazz.isAnnotationPresent不起作用?

最佳答案

从评论来看,您似乎有几个类加载器。带注释的类及其 Manifest 注释由第一个类加载器加载,问题中包含 if 测试的类由第二个类加载器加载,并使用第二个类加载器重新加载 Manifest 类.

因此,您测试 Manifest.class 是否与 clazz.getAnnotations()[0] 相同,但它们不是,因为尽管它们具有名称相同,但它们是两个不同的类,因为由两个不同的类加载器加载。

很难告诉您如何解决该问题,因为我们不知道您的应用程序做什么、如何做以及在哪个环境中做。但您应该确保只有一个类加载器可以加载该类。

例如,如果在 Web 应用程序中运行,则该类应位于容器的 claspath 中,或位于 Web 应用程序的类路径中(WEB-INF/classes 和 WEB-INF/lib/xxx.jar),但不能同时位于两者中。

关于java - Class#isAnnotationPresent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15174599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com