带有 Java 11 编译代码的未命名模块 ClassCastException,而它适用于相同源代码的 Java 8 编译 [关闭]

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

我们正在将 OSGi 应用程序的dev 环境从 Java 8 编译迁移到 Java 11 编译。

目前,该应用程序在 Java 8 编译和 Java 11 运行时执行下运行良好。

我们在 Java 11 中编译代码并进行部署时,它给我们以下错误:

Caused by: java.lang.ClassCastException: class <package>.ClassA cannot be cast to class [B (<package>.ClassA is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @7112dbb8; [B is in module java.base of loader 'bootstrap')
    at <some counumer package>.ConsumerClass.getKey(ConsumerClass.java:94)
    at <some counumer package>.ProcessEventsActivity.processEvents(ProcessEventsActivity.java:129)
    at jdk.internal.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Dele

public T getKey() throws Exception {
    if (isExternal) {
        return (T) new MessageExternalEntity<>(myRecord.key()); // This line throws exception on constructor argument casting while calling. Constructor given below.
    }
    else {
        return (T) myEntityRecord.key();
    }
}

public MessageExternalEntity(final T externalObject) { // This line throws exception
    myExternalObject = externalObject;
}

工作环境和非工作环境之间的唯一区别是在非工作环境中在 Java 11 上的编译。请在这里提出根本原因和可能的前进方向。

Java 11 编译代码是否更改了一些通用处理?

java osgi java-11 classcastexception unnamed-module
© www.soinside.com 2019 - 2024. All rights reserved.