[英]what's the difference between jdk7 & jdk8 in Generic?
List<String> box = new ArrayList<>();
box.add("small");
box.addAll(new ArrayList<>());
在 jdk7 box.addAll(new ArrayList<>())
不会编译,但在 jdk8 中会
任何人都可以帮助我了解 Generic 中 jdk7 和 jdk8 之间的区别?
不同之处在于 Java 8 引入了多表达式。
这些表达式的类型有些未确定,但由表达式使用方式的上下文决定。
new ArrayList<>()
是一个多表达式。 就其本身而言,它可以是具有任何元素类型的列表:编译器在决定类型之前“等待并查看”。
Java 7 不支持多表达式。 它会将new ArrayList<>()
视为new ArrayList<Object>()
,因此与box.addAll
不兼容。
如果没有多表达式,lambdas 和流会非常笨拙。
这就是改进后的类型推断JEP101 。 它推断空列表的通用类型。 具体来说,这是在论证位置添加推理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.