我有一个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')
我明白编译器希望我在类型方面更加明确,但我没有看到其他解决此问题的方式。有什么想法吗?
Any
也必须擦除;但我不确定,也无法测试。我很高兴它能够工作 :D - Luis Miguel Mejía SuárezAnyRef
涵盖了除了原始类型包装器和void
对应项(Unit
是AnyVal
)以外的所有Object
。这是因为AnyVal
根据上下文被转换为原始类型或包装器。所以当你与 Java 交互时,你应该手动将你的类型转换为 Java 类型 -AnyVal
和AnyRef
不是 100% 可映射到原始类型或Object
,所以最好自己进行转换或使用Any
并让 Scala 决定。 - Mateusz Kubuszok