我对反射库有问题。我试图动态加载实现特定接口的所有类。只要我不在这些类中使用lambda表达式(Java
8),一切就可以正常工作(所有类都已加载)。我尝试升级lib版本,但效果是相同的(java.io.IOException:无效的常量类型:18)。
依赖关系并在pom.xml中构建
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.19.0-GA</version>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
没有排除是一样的效果。
码:
URL jarUrl = jarFile.toURI().toURL();
URLClassLoader child = new URLClassLoader(new URL[]{jarUrl}, this.getClass().getClassLoader());
ConfigurationBuilder builder = new ConfigurationBuilder()
.addClassLoader(child)
.addUrls(jarUrl)
.setScanners(new SubTypesScanner());
Reflections r = new Reflections(builder);
return r.getSubTypesOf(cls);
如何使用lambda表达式加载类?
PS对不起,英语:)
查看此表,您会看到“常量类型:18”是指标记值为的CONSTANT_InvokeDynamic
属性18
。
因此,您正在使用的库具有与Java 8不兼容的类解析器。实际上,该类解析器甚至与Java 7不兼容,因为自Java
7开始就指定了此常量值。它与普通的Java代码在Java 7中不使用此功能无关,但是与不同语言生成的代码进行交互时却是如此。
JVM的编程语言,它甚至可能在Java 7中失败。
在反射的错误跟踪器中有一个项目描述您的问题。在底部,您会发现以下通知:
通过此修复程序:https:
//issues.jboss.org/browse/JASSIST-174
javassist获得了对该常量的支持。因此,使用3.18.2-GA不会发生此错误。
问题内容: 我有一个有一堆常量字符串的类。 我需要通过反射加载此类并检索这些常量。我可以起床: 但是我对如何检索此类中的字段感到困惑。 问题答案: 访问字段的快速样本-
主要内容:1 Java8 方法参数反射的介绍,2 Method类,3 Method类的方法,4 Parameter类,5 Parameter类的方法,6 Java8 方法参数反射的案例1 Java8 方法参数反射的介绍 Java提供了一项新功能,您可以在其中获得任何方法或构造函数的形式参数的名称。java.lang.reflect包包含所有必需的类,例如Method和Parameter,可用于参数反射。 2 Method类 Method类提供有关类或接口上的单个方法的信息。反射的方法可以是类方法
问题内容: 我正在创建一个cli工具来管理现有应用程序。应用程序和测试都可以正常运行,但尽管如此,但是运行jar中存在的cli工具时却收到javassist失败: 由于我知道jar可以很好地进行单元测试和集成测试,因此我认为javassist可能存在问题,因此我尝试了cglib。然后,字节码提供程序显示为cglib,但是我仍然得到与其中存在javassist完全相同的堆栈跟踪。 cglib肯定在类
我正在尝试用C重新创建vector类 我在函数at()中得到这个错误; “int”类型的非常量引用的初始化无效 即使函数应该返回引用,也不能将指针作为地址返回吗? 代码如下所示:
为什么上面的无效字符是常量,这在JavaScript中工作得很完美。我想显示英尺和英寸的高度,并且使用了这个客户端,但是当我在服务器端使用相同的高度时,它显示。
我有一个项目。它使用了、和maven。可以使用成功构建它。 要运行Spring引导应用程序,我使用了命令 但它错误地失败了 我为start命令添加了额外的参数 但是当我运行它时,我得到了这个错误 到底是什么问题?