热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java11和IntelliJIDEA——有趣的搭配

Java11和IntelliJIDEA由TrishaGee于2018 年9月26日发表本周Java11发布了!感觉就像昨天我们对Java9说的一样。这个新的六个月发布节奏对Java
Java 11和IntelliJ IDEA

Trisha Gee于2018 年9月26日发表

本周Java 11发布了!感觉就像昨天我们对Java 9说的一样。这个新的六个月发布节奏对Java社区来说是一个很大的变化,而且是一个受欢迎的 – Java开发人员定期获得一小部分有趣的新功能。

《Java 11和IntelliJ IDEA——有趣的搭配》

Java 11

Java 11与之前的Java 10一样,有一个相当简短的新功能列表,这对我们的开发人员来说是件好事,因为它更容易看到对我们有用和有用的东西。从IntelliJ IDEA的角度来看,实际上只有一个功能受益于IDE中的一些额外支持,那就是JEP 323:Lambda参数的本地变量语法。我们已经在IntelliJ IDEA 2018.2的Java 11支持环境中写了这篇博文,但让我们再次快速介绍它。

在Java 8中引入lambda表达式时,您可以编写如下内容:

 

1

BiConsumer<Processor, String> consumer1 = (Processor x, String y) -> x.process(y);

包含x和y参数的类型信息。但是您不需要包含此类型信息,因为它已经是已知的 &#8211; 在这种情况下,左侧的BiConsumer使用泛型声明这两种类型。IntelliJ IDEA允许您根据需要删除这些类型:

 

《Java 11和IntelliJ IDEA——有趣的搭配》

 

Java 10 var为局部变量类型引入,我们将在本文稍后讨论,Java 11进一步考虑var了lambda表达式参数。这个的主要用例是当参数需要注释时。注释出现在类型旁边,因此在Java 11之前,这意味着带有注释的代码可能类似于:

 

1

BiConsumer<Processor, String> consumer = (@NotNull Processor x, @Nullable String y) -> x.process(y);

在Java 11中,我们可以使用var而不是参数类型来缩短它,IntelliJ IDEA可以为您执行此转换。请注意,当您在类型上按Alt + Enter时,建议执行此操作,但未在代码中将其标记为警告。

 

《Java 11和IntelliJ IDEA——有趣的搭配》

 

Java 11:请注意,您使用的API可能不再存在

除了新的语言功能之外,了解Java 11实际上删除了功能也很重要。此步骤不仅会影响已弃用的功能和功能,还可以通过将一些大型部分移动到单独的依赖项(例如JavaFX)或期望应用程序使用已经可用的外部依赖项来简化语言的核心。(例如Java EE)。

无论是Java EE和CORBA组件已被删除。虽然CORBA可能没有被高度使用,但许多应用程序当然都使用Java EE。通常,这是在应用程序服务器或Java EE的某些其他特定实现的上下文中,但是某些应用程序和库使用Java EE的一小部分用于特定目的。例如,JAXB现在不是核心语言,您需要添加特定的依赖关系。有关此StackOverflow问题可能的替换依赖项的更多信息。

Java 10

Java 10仅在六个月前发布,我们中的许多人可能还没有开始使用它。

提醒一下,Java 10的主要新功能是引入了var,正如我们上面所看到的,它让我们使用var而不是特定的类型。这并没有在Java中引入动态类型,而是继续减少Java中样板的趋势,类似于引入菱形运算符,这意味着我们不再需要在等号的两边声明泛型类型。

IntelliJ IDEA var以多种方式支持。首先,检查可以选择用类型varvar类型替换类型。

 

《Java 11和IntelliJ IDEA——有趣的搭配》

 

默认情况下,检查不会向您发出有关可以使用的var代码(或应具有显式类型的代码)的警告,但通常可以根据您团队的样式配置检查。

《Java 11和IntelliJ IDEA——有趣的搭配》

IntelliJ IDEA还可以帮助您导航使用的代码var。按住Ctrl /⌘并将鼠标悬停在上方var将显示变量的类型。

《Java 11和IntelliJ IDEA——有趣的搭配》

与任何其他类型一样,我们可以单击此处并导航到声明,或者我们可以使用Ctrl + B /⌘B导航到声明var。我们还可以使用快速文档(Ctrl + Q / F1)或快速定义(Ctrl + Shift + I /⌥Space)var来查看类型。

《Java 11和IntelliJ IDEA——有趣的搭配》

我们在IntelliJ IDEA和Java 10的网络研讨会上var详细介绍了使用情况。

Java 10还附带了一些对Optional和Collectors的一些很好的补充,所以如果你使用Streams API,那么值得看看这些新方法。

Java 9

去年9月发布的Java 9版本很大,人们可能会惊讶地发现10和11都有效地取代了9 &#8211; 一些JDK提供商(例如Oracle)将不会为Java 9(或Java 10)提供长期支持。想要直接从Java 8跳到Java 11的团队,在没有长期支持的情况下跳过版本,仍然需要了解Java 9中的变化,因为很明显它们将成为Java 11的一部分。

我们已经在这个博客上多次介绍过Java 9和IntelliJ IDEA,并且我们有一个网络研讨会的录音,其中涵盖了开发人员可能感兴趣的许多Java 9功能。当然,模块化是最着名的功能,但还有很多其他功能,包括新的便利工厂收集方法。就个人而言,这是我最喜欢的Java 9功能,方便的IntelliJ IDEA检查可以提供迁移代码以使用新方法。

 

《Java 11和IntelliJ IDEA——有趣的搭配》

 

关于移民的说明

虽然这篇文章的目的是展示IntelliJ IDEA中的功能,使得使用Java 9,10和11更容易,而不是专门帮助开发人员将他们的代码迁移到这些版本,我们不得不投入这方面的一些建议。如果您希望在不久的将来使用Java 11,首先应确保所有依赖项都是最新的。许多JVM语言,库和框架必须对使用Java 9进行重大更改,而且还要更多地跟上Java 10和Java 11的更改。您应该能够以最小的方式更新您正在使用的库的版本对您自己的应用程序的影响,并且是能够使用最新版本的Java的重要一步。

如果您对从Java 8迁移感兴趣,我在其他地方写了几篇关于该主题的文章,特别是处理迁移到Java 9(当然,它也适用于Java 11):

  • 当然,使用IntelliJ IDEA 从Java 8迁移到Java Java for Java杂志。
  • 无痛迁移到Java Jigsaw模块 &#8211; InfoQ的案例研究,旨在为您的应用程序引入模块化。

Java 11可能只是刚刚发布,但IntelliJ IDEA已经完全支持它,并且更容易使用Java 11,10和9中的新功能。《Java 11和IntelliJ IDEA——有趣的搭配》

今天试试吧!您可以下载开源OpenJDK版本(由Oracle提供),该版本现在可供生产使用。

请注意,我在这里建议使用OpenJDK,因为Oracle已经更改了许可证,现在生产商业和开源JDK。请  阅读这篇文章了解更多信息,了解非常重要。

本文翻译自:Trisha Gee于https://blog.jetbrains.com/idea/2018/09/java-11-and-intellij-idea/的文章

 

转载需备注作者及出处


推荐阅读
  • 本文介绍了如何使用C# Winform开发局域网内的文件传输功能,详细描述了从用户界面到后端网络通信的具体实现。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 解决宝塔面板Nginx反向代理缓存问题
    本文介绍如何在宝塔控制面板中通过编辑Nginx配置文件来解决反向代理中的缓存问题,确保每次请求都能从服务器获取最新的数据。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • 解决远程桌面连接时的身份验证错误问题
    本文介绍了如何解决在尝试远程访问服务器时遇到的身份验证错误,特别是当系统提示‘要求的函数不受支持’时的具体解决步骤。通过调整Windows注册表设置,您可以轻松解决这一常见问题。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • System Center Operations Manager 2007(简称SCOM 2007)作为MOM 2005的升级版,不仅整合了监控与管理功能,还显著简化了操作流程,提供了更加全面和精准的服务管理。 ... [详细]
  • 本文介绍如何通过创建数据库触发器来限制Oracle数据库中特定用户的登录IP地址,以增强系统的安全性。示例代码展示了如何阻止非授权IP地址的登录尝试。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
author-avatar
nnamyp_826
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有