局部变量类型推断未被识别

Posted

技术标签:

【中文标题】局部变量类型推断未被识别【英文标题】:Local Variable Type Inference not being recognized 【发布时间】:2018-09-09 21:14:31 【问题描述】:

我安装了 JDK 10 来试用新功能,但我对var 很感兴趣——出于某种原因,即使将 JDK 添加到 IntelliJ(2018.1 版),以下代码仍然不会编译,说Java找不到符号var

public class Variations 
    public static void main(String[] args) 
        var local = "foo";
        System.out.println(local);
    

我是否在这里遗漏了一些明显的东西,或者 IntelliJ 中是否有我应该启用的选项?

编辑:projectmodule SDK 和语言级别都设置为 Java 10 安装和 lvl。 10(虽然不是X - experimental 级别)。

【问题讨论】:

检查项目和所有模块是否使用了 JDK 10。所有模块的语言级别也应设置为 10,相关截图见***.com/a/12900859/104891。 @CrazyCoder 不幸的是,这些都很好——这也是我的第一个想法(我确实必须改变它们),但重建也没有帮助。不过,我会将其添加到问题中,因为这是一个有效的观点。 请尝试文件 |使缓存无效 |无效并重新启动。删除 IDE 配置 (intellij-support.jetbrains.com/hc/articles/206544519) 并从头开始设置 JDK。如果问题仍然存在,请分享Minimal, Complete, and Verifiable example。 【参考方案1】:

显然,虽然硬重启 IDE 是不够的,但通过在项目和模块上将语言级别设置为 X - Experimental features 一次,然后将其重新设置为 lvl。 10 个 足以让 IDE 恢复正常。

我想我应该感谢@CrazyCoder 给了我这个想法,即使是间接的。

【讨论】:

【参考方案2】:

在 Settings/Build/Compiler/Java Compiler 中,您必须在每个模块中将“目标字节码版本”更改为 10。

【讨论】:

解释他为什么应该这样做也很有帮助。 是的,这是我做的第一件事。显然,我必须将语言级别超过 10,然后再降低一次,这使 IDE 恢复正常。【参考方案3】:

我在网上搜索了一段时间,发现 IntelliJ 完全支持它。您是否检查过您在 IntelliJ 上运行的 SDK 版本是否为第 10 版? 您可以前往项目结构 (Alt+Shift+Ctrl+S)、SDKS查看。如果您在面板左侧没有看到标签 10.0,则从这里开始,只需使用加号按钮手动添加它。 希望这会有所帮助。

【讨论】:

毫无疑问,我将它设置为 Project SDK,并且我也将语言级别设置为 10 - 根据所有的说法和推理,它应该支持它,并且此代码应该编译。因此我很困惑。【参考方案4】:

您的代码在 2018 年 3 月 27 日 构建的我的 MacOS IntelliJ 2018.1 上与 Java10 一起运行良好。

IntelliJ IDEA 2018.1(社区版) 构建 #IC-181.4203.550,构建于 2018 年 3 月 27 日

您的 IntelliJ 或 JDK 可能有错误。尝试从终端使用jshell。如果可以,应该更新您的 IntelliJ。如果不能,应该检查你安装的JDK。我机器上的版本:

《10》 2018-03-20 Java(TM) SE 运行时环境 18.3 (build 10+46)

【讨论】:

以上是关于局部变量类型推断未被识别的主要内容,如果未能解决你的问题,请参考以下文章

jdk11新特性——局部变量类型推断(var ”关键字”)

jdk11新特性——局部变量类型推断(var ”关键字”)

JDK将新增局部变量类型推断功能

JDK10的局部类型局部变量类型推断功能

JDK11 | 第三篇 : 局部变量类型推断

java新特性--06--JDK10