java/scala 不兼容类型,当将 scala 类封装或使用 instanceof到 java 类时,即使 scala 类扩展了 java 类

问题描述

这几乎是代码设置:

// java
public class JavaA { 

}

// scala
class ScalaA() extends JavaA {

}

但是在java中,如果我在某处有一个ScalaA的实例(或者即使它是空的),但是尝试这样做:

ScalaA scalaA = ...
if (scalaA instanceof JavaA) { ... }

在instanceof 的那一行,intellij 没有显示任何错误。但是如果我尝试编译代码,我会得到 java: incompatible types

我已将 scala sdk 作为项目依赖项包含在内,java 版本是正确的,我尝试使缓存/重新启动等无效,但它似乎不起作用。有谁知道如何解决这个问题?

还有,Scala 类,它编译在一个 .jar 文件中,我将它作为依赖项导入。就像使用 scala SDK 和其他东西

编辑:我找到了一个似乎有效的“解决方案”;它不是真正的修复,但它现在有效。我基本上只是使用了一个名为“forceCast”的函数代码如下所示:

public static <T> T forceCast(Object value) {
    try {
        return (T) value;
    }
    catch (Exception e) {
        return null;
    }
}

然后

ScalaA scalaA = ...
JavaA javaA = forceCast(scalaA);

实际上,在这种情况下永远不应该抛出异常。这实际上确实解决了我的问题,让我编译代码。我不确定是否使用 instanceof,但我想我可以做的只是将 scalaA 强制转换为一个对象,然后这样做

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)