Java 12 intellij 开关表达式不起作用

Posted

技术标签:

【中文标题】Java 12 intellij 开关表达式不起作用【英文标题】:Java 12 intellij switch expressions doesn't work 【发布时间】:2019-09-17 04:41:18 【问题描述】:

我尝试在 IntelliJ 中使用 Java 12,但是当我尝试运行我的应用时出现错误

Error:(57, 32) java: switch expressions are a preview feature and are disabled by default.
  (use --enable-preview to enable switch expressions)

我在应用配置 VM 选项中添加了 --enable-preview,但仍然出现此错误。我添加了 SDK 路径。有人知道我做错了什么吗?

List<Car> sortedCars = switch (sortType) 
    case COLOR -> cars.stream().sorted(Comparator.comparing(Car::getColor)).collect(Collectors.toList());
    case MILEAGE -> cars.stream().sorted(Comparator.comparing(Car::getMileage)).collect(Collectors.toList());
    case MODEL -> cars.stream().sorted(Comparator.comparing(Car::getModel)).collect(Collectors.toList());
    case PRICE -> cars.stream().sorted(Comparator.comparing(Car::getPrice)).collect(Collectors.toList());
;

【问题讨论】:

哪个intellij版本? @SebastianS IDEA 2019.1.1 附带说明,尽量避免代码重复,否则,您将忽略 switch 表达式的实际好处。考虑List&lt;Car&gt; sortedCars = cars.stream().sorted( switch (sortType) case COLOR -&gt; Comparator.comparing(Car::getColor); case MILEAGE -&gt; Comparator.comparing(Car::getMileage); case MODEL -&gt; Comparator.comparing(Car::getModel); case PRICE -&gt; Comparator.comparing(Car::getPrice); ).collect(Collectors.toList()); 进一步避免重复:List&lt;Car&gt; sortedCars = cars.stream().sorted(Comparator.comparing(switch (sortType) case COLOR -&gt; Car::getColor; case MILEAGE -&gt; Car::getMileage; case MODEL -&gt; Car::getModel; case PRICE -&gt; Car::getPrice; ).collect(Collectors.toList()); 【参考方案1】:

默认情况下,语言级别设置为“12 - 无新语言功能”。您需要将其更改为“12 (Preview) - Switch Expression”,您将看到一个弹出窗口来接受预览更改。发布您将能够在 intellij 中运行 switch 表达式的帖子。

语言级别设置

我正在使用 IntelliJ IDEA 2019.1.1(社区版)

【讨论】:

当您从 Intellij 运行时,您是否看到终端中附加了 --enable-preview?你能分享你的执行日志或截图吗? 你弄明白了吗?【参考方案2】:

请确保您的项目的“项目结构”对话框中的“项目语言级别”设置设置为 Java 12。在这种情况下,IntelliJ IDEA 将自动添加 --enable-preview 选项。

运行配置中的 VM 选项字段会影响您的应用程序的启动方式,而不是它的编译方式,因此添加该选项不会产生任何影响。

【讨论】:

以上是关于Java 12 intellij 开关表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

Java 合并排序不起作用

我的Android进阶之旅------&gt;Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

IntelliJ Spring Gradle 项目注释不起作用

在 intellij 上调试评估表达式

IntelliJ IDEA的这些配置,你值得拥有