java - 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
转换为一个对象,然后那样做
解决方案
推荐阅读
- python - 如何在本文中生成像 taht 这样的颜色图?
- jupyter-notebook - 如何解决无法运行“xelatex .\notebook.tex -quiet”命令:notebook.tex:373:?
- python - 使用 matplotlib 生成交互式绘图时的图形问题
- javascript - 如何在浏览器中为附加到 html 的模块设置正确的命名空间,以测试函数对该模块中另一个函数的调用?
- reactjs - 努力在 React 应用程序中使用 Typescript 设置通用助手
- c++ - 如何使用基类函数访问派生类成员函数?
- c# - 如何计算 MessagePack .NET 对象的大小?
- python-3.x - 数据流管道(python)未将输出写入 GCS
- reactjs - useReducer 递增/递减 2 而不是 1
- python - 如何使用 Beautifulsoup 获取最新版本的源码包