【问题标题】:try-with-resources are not supported at this language level - Android此语言级别不支持 try-with-resources - 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";
}

【问题讨论】:

标签: android try-with-resources notsupportedexception


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2017-10-15
    • 2015-05-26
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多