在没有trait Object的情况下在Scala中重用Java泛型集合

时间:2012-04-03 19:35:51

标签: java scala generics collections traits

我正在尝试重用我编写的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代码,而不是整个东西......)

也许某些隐含的定义可能会被拯救出来? 谢谢!

1 个答案:

答案 0 :(得分:7)

限制def test[T <: AnyRef]可以解决问题。

正确的是,通用java方法不应接受例如int[]Array[Int])参数。 Blah[Int]将被视为Blah<Integer>Array[Int]int[],而不是Integer[]