【发布时间】:2018-09-08 13:52:52
【问题描述】:
我正在尝试理解 Java 10 中的 local variable type inference。
-
以下代码在编译和运行时完美运行:
List list1 = Arrays.asList(1L, 2.0F, "3"); var list2 = list1; -
但是,这一行会引发编译错误:
var list3 = Arrays.asList(1L, 2.0F, "3");Error:java: java.lang.AssertionError: Unexpected intersection type: java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>
我真的不明白为什么第二种情况是错误的,但不是第一种情况。因为我希望编译器会推断出list1 的类型并将list2 和list3 视为相同。提前致谢。
【问题讨论】:
-
我不认为你的问题是正确的,因为我尝试了这两个语句并正确执行:jshell> List list3 = Arrays.asList(1L, 2.0F, "3"); list3 ==> [1, 2.0, 3] jshell> List list1 = Arrays.asList(1, 2.0, "3"); list1 ==> [1, 2.0, 3]
-
@AmanChhabra 可能是 IntelliJ...
-
@AmanChhabra 我的意思是 OP 问题与 IntelliJ 有关
-
@AmanChhabra 请注意,OP 的代码与您在评论中输入的代码不同:
var list3与List list3。 -
在第一个示例中,您使用的是raw type
List。当然,当你使用var时,编译器不会推断原始类型List...
标签: java arrays exception type-inference java-10