【发布时间】:2015-08-19 20:16:09
【问题描述】:
我需要从 scala 创建一个 java 对象,而不是它有一个方法,它需要一个参数,它是一个通用接口
java类
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]
我该怎么做?谢谢
【问题讨论】:
-
Class
TMijavatest接受类型参数,但您在没有类型参数的情况下实例化它,因此推断Nothing。指定类型参数。例如:val foo = new TMijavatest[String]() -
JavaTest类也是如此。它是一个泛型类型,因此你应该用一个类型来实例化它,例如val javaTest = new JavaTest[String].