java - 在没有特征对象的 Scala 中重用 Java 泛型集合

标签 java scala generics collections traits

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

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

最佳答案

限制 def test[T <: AnyRef]做的伎俩。

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

关于java - 在没有特征对象的 Scala 中重用 Java 泛型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000126/

相关文章:

java - Vavr 对象的序列化器/反序列化器

java - 对 List<Generic> 显式强制转换的怀疑

Javascript 弹出功能

java - 如何使用 Java native 接口(interface)将字节数组传递给以 char* 作为参数的 C 函数?

java - 是否可以通过 Selenium 代码禁用 Firefox 插件

scala - HDFS目录作为Spark Streaming中的参数

scala - 如何在方法前后访问 Specs2 中的测试/示例/片段名称?

Scala 2.8 突破

c# - 如何创建 DbParameter 列表?

java - 使用枚举值的成员类型声明泛型类时遇到问题