我有一个Scala类,其中有两个重载的set
方法,一个带有Array
参数,另一个带有varargs
。我想从Java端调用这些方法,由于重载和/或装箱/拆箱,我遇到了一些问题。如果有人可以解释我所面临的问题背后的原因和/或建议解决方法,这将很有帮助。
Scala类
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
}
我有一个Scala类,它有两个重载的set方法,一个带有Array参数,另一个带有varargs。我想从Java端调用这些方法,由于重载,我面临一些问题...
我猜是因为Scala产生了