大家来讨论下,Java中的这段代码,编译能通过吗?如果编译能通过,执行能成功吗??

大家来讨论下,Java中的这段代码,编译能通过吗?如果编译能通过,执行能成功吗??

7f06c95e19e73f68828d18cb5cb0cc1b.png

请先 登录 后评论

1 个回答

xxxxxa

关于这个讨论的个人看法:1. Java中Array是协变的(covarient),但是这个特性并不好,会造成运行时错误,比如这三行代码,编译虽然能通过,但是运行时报错。 2. Java中的List(泛型)是非协变的(invarient),因此不存在这里的问题,但是又不够灵活,因此泛型用上界(upper bound)和下界(lower bound)来实现更加宽松的类型声明,即通配符(wildcard)。从这个角度来说,Java中List比Array更安全,应该多用List。 3. 另外就是一些新的编程语言比如scala有Java的前车之鉴,本身就支持了协变(covarient)和逆变(contra-variant),其实本质上也是上界和下界。 4. 可参考这个stackoverflow问答链接:https://stackoverflow.com/questions/28570877/java-covariant-array-bad

请先 登录 后评论