什么是IntelliJ IDEA中的项目语言级别?

71

我正在使用Java 7 SDK和IntelliJ IDEA IDE。

java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

我仍然无法使用Java 7的功能。在搜索了一些信息后,我发现将项目语言级别设置为7(钻石操作符、ARM、多重捕获等)后,我就可以使用所有这些功能。这是什么意思呢?如果它与正在使用的JDK有关的话,级别8(Lambda、注解等)又是什么?Java 8还没有发布。根据维基百科,Java 8预计于2014年3月发布。请问有人能解释一下这个语言级别的概念吗?


请观看JetBrains的视频:Helen关于项目SDK、语言级别和JDK的观点 - Basil Bourque
4个回答

103
语言级别设置确定编辑器中代码辅助应支持的功能。例如,如果您正在使用JDK 1.7但希望您的代码与JDK 1.6兼容,您可以将语言级别设置低于您实际的JDK支持的版本(在JDK 1.6的情况下为6.0),并且只获得推荐在1.6及以下版本上被支持的重构/语法建议。根据您的编译器,它也可以给编译器选项以删除对新语法元素的支持。
8.0(与Java 8相对应)可供那些想要尝试其中一个Java 8快照的人使用。由于Java 8尚未发布,因此语言级别8.0在发布之前可能会发生变化。

这些设置是嵌入在IDE中的,还是通过网络更新获取的,以便设置编辑器中的代码辅助应支持哪些功能? - Aniket Thakur
22
通过文件 > 项目结构 > 项目 > 项目语言级别设置语言级别。 - JohnK
1
@Mikhail 我会认为是JDK 9快照版本 - Joachim Isaksson
2
我已经设置了项目语言级别,但编辑器一直抱怨是这样的:文件 > 项目结构 > 模块(源选项卡)> 语言级别 - juanmf
1
相比于Eclipse,IDEA的用户体验真的很糟糕。同样的设置需要在多个地方进行。感谢@juanmf的提示帮助了我。 - vikramvi
显示剩余2条评论

5
根据 IntelliJ Wiki 中 “在 IntelliJ IDEA 中设置项目”“探索通用项目设置”部分的文档,项目语言级别会影响IDE提供的智能提示。
它还决定了 IntelliJ 在开发时编译 Java 代码时所使用的编译器的行为。
此设置告诉项目可用的编译器所有功能。例如,将语言级别设置为 JDK 5 将允许 IntelliJ 识别源代码中存在的枚举等关键字。

5
如果你看一下javac Java编译器命令的选项, 你会发现-source-target选项允许你编译Java的替代版本。我不确定IntelliJ的语言级别设置对应哪个选项(可能是-source),但它基本上告诉IntelliJ在指定的Java语言版本中使用提供的Java SDK(在Project SDK字段中)而不是SDK提供的最新版本。
因此,尽管你安装了Java 7,你可以将语言级别设置为6.0,然后IntelliJ将根据Java 6规范而不是Java 7规范编译代码。这包括所有实时建议和代码检查,以及您输入时完成。
Java 8选项可能是由于Java 8的测试版可用。
我从未尝试过将语言级别设置为高于JDK版本的情况会发生什么。

在我的情况下,如果您将语言级别设置为高于JDK版本的内容,那么您将会遇到一个错误。错误:加载主类com.practice.Main时发生LinkageError java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=com/practice/Main, offset=6 - max

0
解释图形导航
您可以通过以下路径访问“语言级别”配置:文件 > 项目结构... > 项目(在“项目设置”部分下)

How to reach Language level setting


在设置“语言级别”时,请注意“LTS版本”和“其他版本”标题下的各种语言级别是如何分开的。我之前没有注意到这一点,花了一些时间才弄清楚为什么级别8没有显示在我的下拉菜单中。

IntelliJ Language level dropdown


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接