使用Java ArrayList初始化Scala中的Java列表
在scala的时候我写使用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,但我想原因是一样的 您正在将子类型多态性与泛型
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]()
。