我发现,情况1和情况3可以编译通过,但情况2无法通过编译。(SubClassB扩展了一个抽象类SuperClassA) 我想知道的是,为什么情况1和情况3没有编译错误。 如果这是JDK的bug,为什么情况2不能通过强制类型转换检查?
// case 1
List<SuperClassA> a = new ArrayList<>();
SubClassB b = (SubClassB) a;
// case 2
List<Number> m = new ArrayList<>();
Long n = (Long) m; //Error:(xx,yy) java: incompatible types: java.util.List<java.lang.Number> cannot be converted to java.lang.Long
// case 3
List<Exception> e = new ArrayList<>();
RuntimeException d = (RuntimeException) e;