繁体   English   中英

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

[英]Initialise Java List in Scala with Java ArrayList

当在斯卡拉,我写

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<T>分配给List<T>变量,但是这里有一个List<List<T>>并且您正在尝试分配类型为ArrayList<ArrayList<T>>

但是,即使F是E的子类型, List<E>也不是List<F>的子类型,因此不允许直接这样做(不变性),但是Scala具有管理此问题的工具 (因为Java具有边界和通配符)。

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

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

您也可以编写以下内容以显式类型:

val data: java.util.List[? extends java.util.List[Double]] = new java.util.ArrayList[java.util.ArrayList[Double]]()

易于理解,即使B extends A List<A>也不是List<B>super B extends A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM