Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误论点:为什么是列表<;列表<&燃气轮机&燃气轮机;不等同于列表<;对象>;?_Java - Fatal编程技术网

Java 错误论点:为什么是列表<;列表<&燃气轮机&燃气轮机;不等同于列表<;对象>;?

Java 错误论点:为什么是列表<;列表<&燃气轮机&燃气轮机;不等同于列表<;对象>;?,java,Java,以下代码给出了一个编译错误: publicstaticfunctionacquisitioncolors=(col)->Seq.of( Tuple.Tuple(Formatter.COLOR, 序号( 序号of(col.toList(), 序号( 序列号(“停止”、“停止”,空,“红色”).toList(), “学习”、“学习”的顺序,空,“灰色”).toList(), 序列号(“停止”、“停止”,空,“红色”).toList(), “Reduce”、“reducef”、null、“orange

以下代码给出了一个编译错误:

publicstaticfunctionacquisitioncolors=(col)->Seq.of(
Tuple.Tuple(Formatter.COLOR,
序号(
序号of(col.toList(),
序号(
序列号(“停止”、“停止”,空,“红色”).toList(),
“学习”、“学习”的顺序,空,“灰色”).toList(),
序列号(“停止”、“停止”,空,“红色”).toList(),
“Reduce”、“reducef”、null、“orange”的顺序。toList(),
“保留”、“保留”,空,“绿色”)的顺序。toList(),
序列号(“增加”、“增加”,空,“蓝色”)。toList()
)托利斯先生()
)托利斯先生()
)
);

为什么会发生这种情况?

您应该看看Java中的类型擦除和原始类型

列表使用泛型,因此当您尝试创建具有定义原始类型的列表时,它将使用
对象

List list;
// means that list holds Objects

List<String> listOfStrings;
// means that list holds Strings
为什么我不能将
列表
转换为
列表
List
不也是
对象吗

因为<代码>列表
意味着它可以在给定的列表中包含任何
对象
,甚至是一个
映射
,但是当您将其转换为
列表
时,包含任何
对象
就不再有意义,并且仅限于
列表


使用
Collections.singletonList()
时它是如何工作的


这仅仅是因为
Collections.singletonList()
正在返回一个
List
,所以编译器在运行时不会对此抱怨。请参阅Lesiak关于编译时类型参数推断的回答。

答案的两部分:
List
是不变的,因此类型为
List
Collections的表达式。singletonList()实际上是根据文档返回一个列表。
我相信您误解了文档。这是完全错误的。
列表
的每个实现都是
对象
的子类型。
public static Function<int[], Stream<Tuple2<Formatter, List<Object>>>> acquisitionColors = (col) -> Seq.of(
            Tuple.tuple(Formatter.COLOR,
                    Collections.singletonList(
                     ...
                    ).toList())
            )
    );
List list;
// means that list holds Objects

List<String> listOfStrings;
// means that list holds Strings
List<List<? extends java.lanq.Object>> // (Object or children of it)