我正在尝试重用我编写的Java泛型集合,看起来很像这样:
public class Blah<T>
implements List<T>
{
...
public void test(T[] array) {
...
}
...
}
当从使用上面的Scala泛型集合中使用时,我收到编译错误,我注意到Blah类方法不是T,而是T和java.lang.Object!
Object MyStaticObject {
def test[T](array: Array[T]) = {
val x = new Blah[T]();
x.test(array) // <- error here: Overloaded method with alternatives test[T with java.lang.Object] ... cannot be applied
}
如果没有在Scala中重写Blah类,有没有办法避免这种情况? (这有效,但我有太多这样的Java代码,而不是整个东西......)
也许某些隐含的定义可能会被拯救出来? 谢谢!
答案 0 :(得分:7)
限制def test[T <: AnyRef]
可以解决问题。
正确的是,通用java方法不应接受例如int[]
(Array[Int]
)参数。
Blah[Int]
将被视为Blah<Integer>
,Array[Int]
为int[]
,而不是Integer[]
。