使 Scala 代码可与 Java 库互操作

Making Scala code interoperable with a Java library

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