У меня есть класс Scala, который имеет два перегруженных метода set
, один с параметром Array
, а другой с varargs
. Я хочу вызвать эти методы со стороны Java, я столкнулся с некоторыми проблемами из-за перегрузки и / или упаковки / распаковки. Было бы полезно, если бы кто-то смог объяснить причину проблемы, с которой я столкнулся, и / или предложить обходные пути.
Scala class
class Sample {
def set[S](values: Array[S]): Unit = {
println("Array overload")
}
@varargs
def set[S](value: S, values: S*): Unit = {
println("Varargs overload")
}
}
Позвоните по номеру Java
public static void main(String[] args) {
Sample sample = new Sample();
Boolean[] array = {true, false};
Boolean boxed = true;
boolean primitive = true;
// works for array
sample.set(array); // should call Array-overload, calls Array-overload
// doesn't work for single element varargs
sample.set(boxed); // should call varargs-overload, calls Array-overload instead
sample.set(primitive); // should call varargs-overload, calls Array-overload instead
// works for multiple varargs
sample.set(boxed, boxed); // should call varargs-overload, varargs-overload is called
sample.set(primitive, primitive); // should call varargs-overload, varargs-overload is called
}