这个语言级别不支持自动关闭资源功能 - Android。

28

在以下发布的代码中,我遇到了“此语言级别不支持try-with-resources”的问题,在尝试将语言设置为7后仍然出现相同的示例,并且仍然给我选择转换为语言7的选项。

public String ReadFile(String fileName) {

    try (BufferedReader br = new BufferedReader(new FileReader(fileName+".txt"))) {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }

        String everything = sb.toString();
        return everything;
    } catch (FileNotFoundException ex) {
        Logger.getLogger(SaveNLoadRank.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(SaveNLoadRank.class.getName()).log(Level.SEVERE, null, ex);
    }
    return "1";
}

5
阅读此帖子:https://dev59.com/vWIj5IYBdhLWcg3wPy0a#22303654,其中解释了 Try-with-resources 需要最低 minSdkVersion 为 19。 - Phantômaxx
可能是 Java 7语言特性与Android 的重复问题。 - rds
2个回答

47
如果你的minSdkVersion小于19,那么就不支持使用try-with-resources特性。因此,如果你遇到了问题,很可能是因为你的应用程序不支持API版本19或更高版本(2014年6月)。2014年3月发布的SDK工具22.6版本添加了对Java 7语言特性的支持(请参见此处)。然而,try-with-resources特性是无法在之前的Android版本中引入的,因此使用此特性的应用程序必须在19及以上版本上运行,这就是minSdkVersion的要求。

更新现在您可以在任何API上使用try-with-resources。

除了上面提到的Java 8语言特性和API外,Android Studio 3.0及更高版本还将try-with-resources的支持扩展到所有Android API级别。

要开始使用受支持的Java 8语言特性,请将Android插件更新到3.0.0(或更高版本)。之后,对于每个使用Java 8语言特性的模块(无论是在其源代码中还是通过依赖项),都要在项目结构对话框中将源兼容性和目标兼容性更新为1.8,如图2所示(单击文件>项目结构)。

https://developer.android.com/studio/write/java8-support.html


@user3272243- 很遗憾,您需要至少有10个。否则,您的应用程序将在不支持try-with-resources的设备上可用。 - Bryan Herbst
我能够通过缩小 try catch 的范围来解决它,但还是谢谢您的帮助 :) - this.user3272243
更新加一 - 当我的外部库可以正常使用try with resources,但Andriod Studio不允许我在应用程序中使用它时,我就知道有些奇怪的事情发生了。不过我同意@JemshitIskenderov的观点 - 选择支持的API版本是你自己的决定,而不是一个“问题”。 - Rodney
我很好奇这个支持是如何实现的,所以进行了一些研究并撰写了一篇博客文章,展示了dx/d8解糖支持的工作原理。链接在此:https://blog.osom.info/2019/10/try-with-resources-desugaring-support.html - Alex Lipov
值得一提的是,在运行Android Studio 3.6时,它不断要求使用try-with-resources,而最小SDK设置为14!我不得不使用“suppress for statement”。这非常令人烦恼和危险,因为在任何低于19的Android上使用try-with-resources都会导致崩溃! - 3c71

2

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