java - Scala 使用数组参数调用 Java 方法

标签 java scala

假设我有一个如下所示的 Java API:

public class JavaApi<T> {
    public void foo(T[] data) {
        ...
    }
}

我想使用以下类从 Scala 调用它:

class Caller[T] {
    val javaApi = new JavaApi[T]()

    def callApi(data: Array[T]) = javaApi.foo(data)
}

编译时,我得到以下信息:

type mismatch;
found   : Array[T]
required: Array[T with Object]
Note: T >: T with Object, but class Array is invariant in type T.
You may with to investigate a wildcard type such as `_ >: T with Object`. (SLS 3.2.10)
  def callApi(data: Array[T]) = javaApi.foo(data)

最佳答案

您可以查看Scala type hierarchy 。更具体地说,这句话是:

If Scala is used in the context of a Java runtime environment, then scala.AnyRef corresponds to java.lang.Object

因此,通过按照 Jubobs 的建议进行更改,您可以确定该类型对应于一个对象:

class Caller[T<: AnyRef] {
    val javaApi = new JavaApi[T]()

    def callApi(data: Array[T]) = javaApi.foo(data)
}

因此,如果您需要任何值类型(如 int、char、boolean),您需要将它们转换为对象等效的装箱 Java 类型(如 Integer、Character 或 Boolean)。看: enter image description here

关于java - Scala 使用数组参数调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997332/

相关文章:

scala - 如何提高 Akka-http websocket 性能

scala - Spark scala mocking spark.implicits 用于单元测试

scala - 用于融合平台的 sbt 解析器

scala - 使用泛型进行 Doobie 批量更新

java - Git 存储库克隆失败。缺少 CR

java - 将枚举值关联到整数

java - 如何获取所有主题分区的最后偏移量?

java - 如何在 Java 线程中将记录插入数据库?

java - 如何更新.getText()?

Scala:收集不可变状态的更新/更改