在scala

时间:2015-08-19 10:57:27

标签: java scala

从scala我需要创建一个java对象,而不是一个方法,它需要一个参数,它是一个通用的接口

java class

public class JavaTest<T> {
    public List<T> add(IJavaTest<T> javaTest){
        return null;
    }
}

java接口

public interface IJavaTest<T> {
    String ss();
}

在scala中我实现了这个:

val javaTest = new JavaTest

class TMijavatest[T] extends IJavaTest[T] {
  override def ss(): String = ""
}

val foo=new TMijavatest()

但是当我调用add方法时

javaTest.add(foo);

我在intellij中有这个错误: 类型不匹配,预期:IJavaTest [T],实际TMijavatest [Nothing]

使用:

javaTest.add(foo.asInstanceOf);

它编译我,但在执行时我有这个错误:

服务器中发生意外错误。 引起:java.lang.ClassCastException:my.pakage.Test $ TMijavatest $ 1无法强制转换为scala.runtime.Nothing $

如果我像这样生成foo对象:

 val foo = new TMijavatest[String]
 javaTest.add(foo);

我在intellij中有这个错误: 类型不匹配,预期:IJavaTest [T],实际TMijavatest [String]

我怎么能这样做?谢谢

1 个答案:

答案 0 :(得分:1)

您应该实例化JavaTest&amp; TMijavatest类型

val javaTest = new JavaTest[String]

class TMijavatest[T] extends IJavaTest[T] {
  override def ss(): String = ""
}

val foo = new TMijavatest[String]

javaTest.add(foo)