试图覆盖scala中的java方法时出现类型错误
我有一个用java定义的类试图覆盖scala中的java方法时出现类型错误,java,scala,Java,Scala,我有一个用java定义的类 public class A { List<Group> javaMethod() { } } 但是,我得到一个错误,说方法javaMethod具有不兼容的类型,我假设是因为方法被覆盖时返回的列表的类型是scala.immutable.List,而javaMethod需要的类型是java.util.List 我没有访问类A的权限,因此无法更改函数的签名。如何返回覆盖该方法的scala列表,而不出现类型错误 编辑: 这将使我的列表从Java
public class A {
List<Group> javaMethod() {
}
}
但是,我得到一个错误,说方法javaMethod具有不兼容的类型
,我假设是因为方法被覆盖时返回的列表的类型是scala.immutable.List,而javaMethod需要的类型是java.util.List
我没有访问类A的权限,因此无法更改函数的签名。如何返回覆盖该方法的scala列表,而不出现类型错误
编辑:
这将使我的列表从Java到Scala,但我想将Java列表转换为Scala列表
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
asList(ListBuffer(List(1,2,3): _*))
val x: java.util.List[Int] = ListBuffer(List(1,2,3): _*)
我想你做不到。返回值必须是
列表的(子类)
。要获得完全不同的返回类型,您必须创建不同的方法,例如javaMethod2
,并且假设您的实现实际创建了List[Group]
,那么您仍然会覆盖javaMethod
,但返回类型为List
,只需调用javaMethod2
并将List[Group]
转换为List
。可能重复@shmosel,我想用相反的方法做什么阻止您使用java.util.List[Group]
?依赖于该值的整个剩余代码库
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
asList(ListBuffer(List(1,2,3): _*))
val x: java.util.List[Int] = ListBuffer(List(1,2,3): _*)