我有一个Kotlin类
class Result<out ResultType>(val value: ResultType, val msg:String?)
字符串
我在Scala中使用它没有任何问题,直到我尝试写这样的东西,
def processResult(result: Result[AnyRef]) = ...
processResult( new Result[Int](4) )
型
最后一行无法编译,因为
type mismatch;
found : Result[Int]
required: Result[AnyRef]
型
现在,我预计Scala将无法理解Kotlin的“out”定义,但我不认为无论如何都要以一种不会迫使我每次都编写显式强制转换的方式编写processResult()。
我该怎么做?
1条答案
按热度按时间z9smfwbn1#
这里有两个问题。
1/在Scala中,
Int
不是AnyRef
(引用类型)的子类型,而是AnyVal
(所有值类型)的子类型。在纯Scala代码中也会出现同样的错误:
字符串
使用
Any
解决了第一个问题,但这可能不被鼓励,因为你可能会丢失关于底层类型的任何信息。您可以将类型添加到方法本身:
型
这取决于你期望做什么。
2/事实上,Kotlin
out
和Scala+/-
之间没有互操作。不幸的是,我不认为有一个简单的方法。编辑:正如Luis在评论中所建议的,在 Package 器类中使用
.asInstanceOf
的 Package 器类+可能是一个解决方案。