使Scala代码与Java库可互操作



我有一个Java库,我必须使用/调用它,而且我是在Scala中使用/调用的。Java库有这样一个签名:

JavaFunction( List<Object[]> data) {
this.data = data;
}

我的假设是,为了与Scala兼容,我需要一个AnyRef,所以我定义了这个:

val fromScala: List[Array[AnyRef]] = List(
Array[AnyRef](1, "Str1", 'a'),
Array[AnyRef](2, "Str2", 'b'),
Array[AnyRef](3, "Str3", 'c'),
Array[AnyRef](4, "Str4", 'd')
)

当我试图将其传递给构造函数时,在编译时,我遇到了以下错误:

the result type of an implicit conversion must be more specific than AnyRef
Array[AnyRef](1,  "Str1", 'a')

我知道编译器希望我对我的类型进行显式处理,但我看不出有任何其他方法可以使其兼容。有什么想法吗?

问题是1,它们是AnyVal而不是AnyRef,因此在引擎盖下发生了隐式转换。

您可以使用Int.box(1)创建java.lang.Integer
但是,装箱仍然会在运行时发生,因此您只是添加样板,您可以尝试查看List[Array[Any]]是否按预期编译和工作。

最新更新