此语言级别不支持 try-with-resources - Android

Posted

技术标签:

【中文标题】此语言级别不支持 try-with-resources - Android【英文标题】:try-with-resources are not supported at this language level - Android 【发布时间】:2014-08-09 01:27:21 【问题描述】:

在下面发布的代码中,我在 android 中遇到了“此语言级别不支持 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";

【问题讨论】:

阅读这篇文章:***.com/a/22303654/2649012,其中解释为Try-with-resources requires minSdkVersion 19 Java 7 language features with Android的可能重复 【参考方案1】:

try-with-resources 仅当您的 minSdkVersion 设置为 19 或更高时才支持。

由于我怀疑您的应用程序是否支持 19 或更高版本的最低 API 版本(2014 年 6 月),这很可能是您的问题。

在 2014 年 3 月发布的 SDK 工具修订版 22.6 (see here) 中添加了对 Java 7 语言功能的支持。但是,try-with-resources 不是一个可以为早期版本的 Android 引入的功能,因此使用该功能的应用程序必须在 19+ 上运行,因此需要 minSdkVersion

更新 您现在可以将 try-with-resources 与任何 API 一起使用。

除了上述 Java 8 语言功能和 API,Android Studio 3.0 及更高版本将对 try-with-resources 的支持扩展到所有 Android API 级别。

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

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

【讨论】:

@user3272243- 不幸的是,您至少需要 10 个。否则您的应用程序将在不支持 try-with-resources 的设备上可用。 我能够修复它,使尝试捕获的部分更小,但感谢您的帮助:) +1 更新 - 我知道当我的外部库使用资源时会发生一些奇怪的事情,但 Andriod 工作室不允许我在我的应用程序中使用它。不过,我确实同意@JemshitIskenderov 的观点 - 您选择支持的 API 版本是您的决定,而不是“问题”。 我很好奇这种支持是如何实现的,所以研究了一下并写了a blogpost,它展示了 dx/d8 脱糖的工作原理。 FWIW,运行 Android Studio 3.6,它一直要求使用 try-with-resources 而 min SDK 设置为 14!我不得不使用“抑制声明”。相当烦人和危险,因为使用 try-with-resources 会在任何低于 19 的 Android 上崩溃!【参考方案2】:

它在 API 19 以下不受支持,但据报道它适用于 15 甚至 14:https://code.google.com/p/android/issues/detail?id=73483

【讨论】:

以上是关于此语言级别不支持 try-with-resources - Android的主要内容,如果未能解决你的问题,请参考以下文章

此语言级别不支持 Lambda 表达式 [重复]

此语言级别不支持 intellij 功能 (...)。我无法编译

Java - 此语言级别不支持 Diamond 类型

错误:-source 1.6 不支持 try-with-resources

android studio打开Zxing的android 项目出错,不支持try-with-resources?

使用 try-with-resources 重写此代码