小编ton*_*oan的帖子

为什么在直接将Arrays.asList()分配给var时会出现AssertionError?

我试图理解Java 10中的局部变量类型推断.

  1. 下面的代码在编译和运行时完美运行:

    List list1 = Arrays.asList(1L, 2.0F, "3");
    var list2 = list1;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但是,此行会引发编译错误:

    var list3 = Arrays.asList(1L, 2.0F, "3");
    
    Run Code Online (Sandbox Code Playgroud)

    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相同.提前致谢.

java arrays type-inference exception java-10

28
推荐指数
2
解决办法
759
查看次数

为什么我们不能将两个推断变量分配为彼此的匿名类?

Java的10允许做一个anonymous classvar这样的:

var a1 = new Object(){};
var a2 = new Object(){};
Run Code Online (Sandbox Code Playgroud)

但是这个赋值会抛出一个错误:

a1 = a2;
Run Code Online (Sandbox Code Playgroud)

jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^

基于错误日志,为什么不能Java的10分配两个推断varS上anonymous class对方,但它可以为其他类型,如做同样的Long,String等等?

java java-10

2
推荐指数
1
解决办法
124
查看次数

标签 统计

java ×2

java-10 ×2

arrays ×1

exception ×1

type-inference ×1