1

我正在尝试重用我编写的 Java 泛型集合,看起来很像这样:

public class Blah<T>
   implements List<T>
{
...
   public void test(T[] array) {
   ...
   }
...
}

当从使用上述内容的 Scala 泛型集合中使用时,我收到编译错误,我注意到 Blah 类方法需要的不是 T,而是带有 java.lang.Object 的 T!

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 代码,而不是移植整个东西......)

也许某种隐含的定义可以起到拯救作用?谢谢!

4

1 回答 1

7

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

没错,通用 java 方法不应该接受 ,例如int[]( Array[Int]) 参数。 Blah[Int]将被视为Blah<Integer>, Array[Int] is int[], which is , which is not Integer[]

于 2012-04-03T20:23:36.340 回答