加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

反思 – Java 8 – 无效的常量类型

发布时间:2020-12-14 16:28:13 所属栏目:Java 来源:网络整理
导读:我有一个 Reflections库的问题. 我正在尝试动态加载实现特定接口的所有类. 一切工作正常(所有类都被加载),只要我不在这些类中使用lambda表达式(java 8). 我尝试升级lib版本,但效果是一样的(java.io.IOException:无效的常量类型:18). 依赖关系并在pom.xml中
我有一个 Reflections库的问题.
我正在尝试动态加载实现特定接口的所有类.
一切工作正常(所有类都被加载),只要我不在这些类中使用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表达式加载类?

对不起,英文:)

解决方法

如果您看到 this table,您将看到“常量类型:18”是指标签值为18的 CONSTANT_InvokeDynamic属性.

所以你使用的库有一个不是Java 8兼容的类解析器.实际上,这个类解析器甚至不是Java 7兼容的,因为这个常量值是从Java 7指定的.由于普通的Java代码在Java 7中不使用这个特性,所以它已经消失了.但是当与不同的JVM的编程语言,甚至可能会与Java 7失败.

有an item in the bug tracker of Reflections描述你的问题.在底部,您会发现通知:

With this fix: 07003 javassist got support for this constant. So with 3.18.2-GA this error doesn’t occur.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读