问题标签 [reflections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3921 浏览

java - 如何使用 Google 反射库扫描在运行时加载的 JAR?

是否有配置反射库的解决方案,以便它还扫描在运行时使用 URLClassLoader 添加的 JAR?

目前,反射只是扫描 ClassLoader 中的 URL。这是我现在使用的配置:

我在反射库的文档中找不到任何提示。

编辑: 这就是我加载 jar 文件的方式:

0 投票
1 回答
3785 浏览

java - 使用 Google 反射进行注释的 Java 扫描类

我正在尝试使用谷歌反射扫描类中的字段以获取我的自定义注释。我不知道为什么,但结果总是一个空集。

测试班

注释类

自定义注释

如果需要任何其他信息,请告诉我。

0 投票
1 回答
1018 浏览

java - 包括给定包之外的类的反射(Dropwizard + Swagger)

我正在使用反射来获取所有具有 Api 注释的类,其中包含以下代码。

如果我从 Eclipse 运行服务器,一切正常并getTypesAnnotatedWith返回正确的类。但是,如果我从命令行运行服务器,我将获得该包之外的类。来自 Swagger 库的类。

我试图找出发生了什么而不是四处走动

提前致谢!

0 投票
2 回答
3410 浏览

java - 如何仅获得具有反射的可实例化类

我正在使用反射包来获取一组实现某个接口的类。该集合将用作可能的命令行选项列表。我的问题是我只想获取可实例化的类,但现在从以下代码中获取可实例化和不可实例化的类(例如抽象类):

有没有办法过滤返回的集合getSubTypesOf以过滤掉抽象类?

0 投票
1 回答
936 浏览

java - 反射和多个罐子

我有两个 jar 文件,让我们调用它们domain.jarscanner.jar. 在扫描仪 jar 中,我使用了 Reflections 库,如下所示:

如果我指向packageNamescanner.jar中的包,一切正常,但如果我尝试从中查找类,domain.jar它总是返回空集。

我运行它java -cp domain.jar -jar scanner.jar

知道我做错了什么吗?从反射使用示例中,它支持多模块项目,所以这应该是可能的。

0 投票
1 回答
2293 浏览

java - 来自 Maven Mojo 的思考

我想使用 Google Reflections 从我的 Maven 插件编译的项目中扫描类。但是插件默认看不到项目的编译类。从Maven 3 文档我读到:

需要从项目的 compile/runtime/test 类路径加载类的插件需要结合 mojo 注解 @requiresDependencyResolution 创建自定义 URLClassLoader。

这至少可以说有点模糊。基本上我需要一个对加载已编译项目类的类加载器的引用。我怎么得到它?

编辑:

好的,@Mojo注释有requiresDependencyResolution参数,所以这很简单,但仍然需要正确的方法来构建类加载器。

0 投票
1 回答
3476 浏览

class - 是否可以使用反射-maven 扫描 web-Inf/lib 中 jar 内的类?

我需要在 Maven 构建过程中为特定接口创建一个子类列表,然后在运行时使用它来加载这些类。我在我的 webapp pom 中添加了反射-maven(来自谷歌代码反射),但是在 maven 构建期间,它只包括来自 web 应用程序的类,而不包括该应用程序web-inf/lib文件夹中的打包 jar 中的类。以下是我使用的直接配置。我查看了插件源代码,它似乎扫描了以下内容:getProject().getBuild().getOutputDirectory().

无论如何我可以配置插件来扫描项目的依赖jar文件吗?

0 投票
2 回答
872 浏览

java - 在 Groovy 中使用 Google-Reflection 会导致异常,而等效的 Java 代码可以工作

我正在尝试使用SO 上另一个答案中的一些代码,并且当代码在 Java 中运行时,从 Groovy 会导致异常。

有问题的代码是:

有问题的抛出异常似乎是:ClasspathHelper.forClassLoader(...)

无论我是否使用,都会发生这种情况@CompileStatic。此外,尝试使用this.getClassLoader()并出现同样的问题。

例外是:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2688) at java.lang.Class.getDeclaredMethods(Class.java:1962) at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getAbstractMethods(CachedSAMClass.java:91) at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethod(CachedSAMClass.java:155) at org.codehaus.groovy.reflection.ClassInfo.isSAM(ClassInfo.java:280) at org.codehaus.groovy.reflection.ClassInfo.createCachedClass(ClassInfo.java:270) at org.codehaus.groovy.reflection.ClassInfo.access$400(ClassInfo.java:36) at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:441) at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:432) at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33) at org.codehaus.groovy.reflection.ClassInfo.getCachedClass(ClassInfo.java:89) at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:107) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:163) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:187) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:193) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createNormalMetaClass(MetaClassRegistry.java:158) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:148) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:131) at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:175) at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:255) at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:859) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:72) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at net.initech.DeltaCodeGen.main(DeltaCodeGen.groovy:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 35 more

我可以通过添加到我的POM.xml

但我不应该有,也没有在 Java 版本中。

0 投票
2 回答
329 浏览

java - Reflections 库是否忽略 RetentionPolicy

为了理解 Java 注释,我尝试了一些操作并得到了一些疑问,即使查看执行我仍然感到困惑。这就是我正在做的事情。定义注解

现在我初始化命令

当我运行程序第 6 行显示null。当策略为 RetentionPolicy.RUNTIME第 6 行时,显示正确的命令。

在此过程中,第 2 行仍然给我正确的 Annotated 类,而不管政策如何。那么这是否意味着反射忽略了RetentionPolicy

即使阅读了大多数教程,我也很困惑。

我的问题实际上是,为什么这是不同的行为?当用策略注释时RetentionPolicy.CLASS 它不应该在运行时给我。我的理解是否错误,或者任何人都可以分享对这两者的理解的宝贵意见。

0 投票
1 回答
1136 浏览

java - 为什么 Reflections.getFieldsAnnotatedWith() 不返回任何字段?

我遇到了Reflections的问题。我正在尝试Set使用方法获取一个字段,Reflections#getFieldsAnnotatedWith但是当我运行单元测试时,它什么也不返回,有人能告诉我为什么吗?(我正在使用 IntelliJ IDE

这是我正在使用的课程,它非常基础。

测试失败并显示以下消息: