使用Java ArrayList初始化Scala中的Java列表

使用Java ArrayList初始化Scala中的Java列表,java,scala,type-conversion,Java,Scala,Type Conversion,在scala的时候我写 val data: java.util.List[java.util.List[Double]] = new java.util.ArrayList[java.util.ArrayList[Double]]() 我得到了错误 util.ArrayList[util.ArrayList[Double]]类型的表达式与预期的util.List[util.List[Double]]类型不一致 我做错了什么?我的答案适用于Java,但我想原因是一样的 您正在将子类型多态性与泛型

在scala的时候我写

val data: java.util.List[java.util.List[Double]] = new java.util.ArrayList[java.util.ArrayList[Double]]()
我得到了错误

util.ArrayList[util.ArrayList[Double]]类型的表达式与预期的util.List[util.List[Double]]类型不一致


我做错了什么?

我的答案适用于Java,但我想原因是一样的


您正在将子类型多态性与泛型混合。确实可以将
ArrayList
分配给
List
变量,但是这里有一个
List
,您试图分配
ArrayList类型的对象来管理这个问题(因为Java有边界和通配符)。

我的答案适用于Java,但我想原因是一样的


您正在将子类型多态性与泛型混合。确实可以将
ArrayList
分配给
List
变量,但是这里有一个
List
,您试图分配
ArrayList类型的对象来管理这个问题(因为Java有边界和通配符)。

您应该使用
val数据:Java.util.List[Java.util.List[Double]]=new java.util.ArrayList[java.util.List[Double]]()

因为泛型类型在Java中不是多态的。看

您还可以编写以下代码来显式显示类型:

val数据:java.util.List[?扩展java.util.List[Double]]=new java.util.ArrayList[java.util.ArrayList[Double]()


易于理解的
List
不是
List
super
,即使
B扩展了a

您也应该使用
val数据:java.util.List[java.util.List[Double]=new java.util.ArrayList[java.util.List[Double]()

因为泛型类型在Java中不是多态的。看

您还可以编写以下代码来显式显示类型:

val数据:java.util.List[?扩展java.util.List[Double]]=new java.util.ArrayList[java.util.ArrayList[Double]()


易于理解的
List
不是
List
超级
,即使
B扩展了a

我猜它是这样的
val数据:java.util.List[java.util.List[Double]=new java.util.ArrayList[java.util.List[Double]()
@JoachimHuet:谢谢!成功了。如果你喜欢,你可以把它变成一个答案——也许提供一个解释(否则人们会评论,它的内容太少)。那我就把它去掉。我猜它是这样的
val data:java.util.List[java.util.List[Double]=new java.util.ArrayList[java.util.List[Double]()
@JoachimHuet:谢谢!成功了。如果你喜欢,你可以把它变成一个答案——也许提供一个解释(否则人们会评论,它的内容太少)。到时候我会的。Java泛型类型不是多态的,Scala类型可以是多态的。2.最后一种类型的Scala语法是
java.util.List[@AlexeyRomanov:With 2。稍后,当将
数据
传递给除
java.util.List[java.util.List[Double]之外的方法时,我会出错
:方法签名不存在。@Make42要使用这些方法,您需要第一个解决方案,它们是不等价的。
java.util.List[@AlexeyRomanov:对不起,我理解缓慢:“第一个解决方案”是什么意思?也许你可以写一个答案,并用更小的步骤进行解释?我想这对以后的读者也会有帮助:-)@Make42第一句:
val-data:java.util.List[java.util.List[Double]=new java.util.ArrayList[java.util.List[Double]()
.1.Java泛型类型不是多态的,Scala类型可以是多态的。2.最后一种类型的Scala语法是
Java.util.List[@AlexeyRomanov:With 2.我稍后在将
数据
传递给
Java.util.List[Java.util.List[Double]]之外的方法时出错
:方法签名不存在。@Make42要使用这些方法,您需要第一个解决方案,它们是不等价的。
java.util.List[@AlexeyRomanov:对不起,我理解缓慢:“第一个解决方案”是什么意思?也许你可以写一个答案,并用更小的步骤进行解释?我想这对以后的读者也会有帮助:-)@Make42第一句:
val数据:java.util.List[java.util.List[Double]=new java.util.ArrayList[java.util.List[Double]()