此语言级别不支持 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的主要内容,如果未能解决你的问题,请参考以下文章
此语言级别不支持 intellij 功能 (...)。我无法编译
错误:-source 1.6 不支持 try-with-resources