Предполагается У меня есть Java API, как показано ниже:Scala вызова метода Java с параметром массива
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 код место нет типа ограничений на 'Т *, последнее может быть' AnyVal', что несовместимо с кодом Java. Поэтому вы должны определить свой класс 'Caller' как' class Caller [T <: AnyRef] {...} '. – Jubobs
Спасибо, что очищает вопрос компиляции.Но я думал, что при компиляции все классы внедряются в Object независимо от того, является ли это scala или java-классом? – Wins
Я не понимаю, что вы подразумеваете под этим ... – Jubobs