我有一个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]]
是否按预期编译和工作。