首页 > 解决方案 > java / scala不兼容的类型,当将scala类封装(或使用instanceof)到java类时,即使scala类扩展了java类

问题描述

这几乎是代码设置:

// java
public class JavaA { 

}

// scala
class ScalaA() extends JavaA {

}

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

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转换为一个对象,然后那样做

标签: javascalascala-java-interop

解决方案


推荐阅读