开封旅游网站建设网页推广莱西市城乡建设局网站
news/
2025/10/2 8:53:27/
文章来源:
开封旅游网站建设网页推广,莱西市城乡建设局网站,区块链网站用vue.js做怎么样,wordpress短信验证码错误最近#xff0c;Oracle采用了一种新策略#xff0c;即每六个月发布一次新的语言版本。 该策略假定只有每个第3版都将提供长期支持或LTS。 快速说明#xff1a; 具有LTS的当前版本是Java 8#xff1b; Java 9仅应在2018年3月之前获得支持#xff0c;因此已经结束。 Java… 最近Oracle采用了一种新策略即每六个月发布一次新的语言版本。 该策略假定只有每个第3版都将提供长期支持或LTS。 快速说明 具有LTS的当前版本是Java 8 Java 9仅应在2018年3月之前获得支持因此已经结束。 Java 10支持到2018年9月; 具有LTS的下一个版本应该是Java 11该版本应该在2018年9月发布并且至少将支持到2023年9月。 Oracle Java SE支持路线图中的更多信息。 我们公司仍然没有采用Java 9但是现在看来完全跳过它并跳到下一个LTS可能是一个有效的选择。 除了Java本身还有很多其他问题例如Spring Boot Java版本等因此我们可能会谨慎行事。 尽管如此鉴于不可避免的更改我还是决定研究Java 10中的功能。该版本中的主要功能似乎是本地类型推断 。 我们都知道这种Java语法 ListUser list new ArrayListUser();
// or since Java 7
ListUser list new ArrayList(); 基本上局部类型推断可以替换为 // left side type is inferred from the right side and will be ArrayList
var userList new ArrayList(); 这意味着代码的样板要少一些但是您需要更多地注意变量和方法名因为var关键字不是不言自明的。 许多编程语言例如ScalaCGo当然还有Kotlin中的本地类型推断已经存在了很长时间。 在这方面Java一直处于落后地位现在已决定对其进行修复。 但是关于此的具体实现存在一些争议。 例如存在以下可能性 如Kotlin或Scala中那样 val用于局部常量而var用于变量 因为const和final已经在Java中保留了所以对于局部常量使用const或仅final作为变量对变量使用var 具有用于对变量常数和变种 最后变种 ; 利用let def或 ; 还有更多关于此的内容。 最终决定使语法更接近现有语法并允许var用于局部变量 final var用于局部常量因此上面显示的示例将在Java 10中运行。 但是替换并非总是那么简单。 例如 // example 1 - list is a ListUser type
ListUser list new ArrayList();// example 2 - userList is an ArrayListObject type, so you lose type information
var userList new ArrayList();// example 3 - userListFixed is an ArrayListUser type, so you keep type information
var userListFixed new ArrayListUser(); 在示例二中在直接替换左侧的情况下编译器无法推断列表类型因此它将默认为Object。 当您尝试处理列表中的项目时它将使您绊倒。 局部类型推断很有用的一个例子是数据转换。 例如您想将一种类型的对象更改为另一种具有不同属性的对象并为此使用一个匿名类。 在Java 8中您只能在流范围内进行操作例如可以在流管道中访问新属性但不能在外部访问。 ListUser users Arrays.asList(new User(Elisabeth, Bennett, 20),new User(Jane, Bennett, 22),new User(Mary, Bennett, 18),new User(Kitty, Bennett, 17),new User(Lydia, Bennett, 15));users.stream().map(u -new Object() {String fullName u.firstName u.lastName;boolean canDrink u.age 18;}).forEach(u - {if (u.canDrink) {System.out.println( u.fullName is of age and can drink);} else {System.out.println(- u.fullName is not of age and cannot drink);}});/* Output will be* Elisabeth Bennett is of age and can drink* Jane Bennett is of age and can drink* Mary Bennett is of age and can drink* - Kitty Bennett is not of age and cannot drink* - Lydia Bennett is not of age and cannot drink*/ 在Java 10中可以在流管道外部使用新对象的转换列表。 ListUser users Arrays.asList(new User(Elisabeth, Bennett, 20),new User(Jane, Bennett, 22),new User(Mary, Bennett, 18),new User(Kitty, Bennett, 17),new User(Lydia, Bennett, 15));final var objects users.stream().map(u -new Object() {String fullName u.firstName u.lastName;boolean canDrink u.age 18;}).collect(Collectors.toUnmodifiableList());// do something with the users...System.out.println();for (var o : objects) {if (o.canDrink) {System.out.println( o.fullName is of age and can drink);} else {System.out.println(- o.fullName is not of age and cannot drink);}} 因此流关闭结束后仍然可以访问映射的对象属性。 但是由于这是局部类型推断因此您将无法在当前方法的局部范围之外使用它们。 Var关键字在方法参数声明中不起作用因此您不能将var传递给另一个方法。 因此拥有var并不意味着Java神奇地变成了动态类型。 它仍然是静态类型的只是添加了一点语法糖并且仅在编译器可以推断类型的地方使用。 对我而言这表明Java一直在努力前进但由于试图保持其历史根源使向后兼容而不是创新成为其主要优先事项而受到极大阻碍。 翻译自: https://www.javacodegeeks.com/2018/04/local-type-inference-in-java-10-or-if-it-quacks-like-a-duck.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924719.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!