我得到了#34;匿名新的runnable()可以替换为lambda"使用以下代码发出警告。
final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
sv.post(new Runnable() {
@Override
public void run() {
sv.fullScroll(ScrollView.FOCUS_DOWN);
}
});
我在Google上搜索非常努力,似乎是使用lambda表达式重写...
final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
Runnable test = () -> sv.fullScroll(ScrollView.FOCUS_DOWN);
test.run();
但是当我尝试运行应用程序时,Android Studio会因错误而停止,如下所示:
Error:(78, 40) error: lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
我无法理解为什么Android Studio会让我使用lambda表达式,即使它无法编译。这是一个错误吗?
另外,我尝试使用gradle-retrolambda,但很难用于biginner。
由于我无法编译代码,因此我不确定上述lambda表达是否正确。
在我看来,IDE不应该抱怨代码无法编译。所以我认为应该抑制使用lambda表达式的警告。但我不知道它是怎么回事......
感谢任何帮助。
答案 0 :(得分:7)
首先,“匿名新的runnable()可以替换为lambda”是你所说的警告。虽然这样的警告不像编译器错误那么严重,但您仍应了解警告的原因,以便做出明智的决定如何处理它。在这种情况下,警告来自IDE,而不是编译器,可以安全地忽略。 Android Studio应该有一个设置,您可以在其中禁用此警告,但我一直无法找到确切的方法。我首先点击源代码中的new Runnable()
文本,然后按Alt-Enter查看快速修复选项。
或者,如果要在代码中使用lambda函数,则需要启用对Java 8的支持,作为您获得的错误消息。请注意,某些Java 8功能仅在您的应用针对Kit Kat或更高版本时可用。早期版本的Android支持Lambda函数,因此在这种情况下您不必担心。要为项目启用Java 8,请修改build.gradle
文件,使其类似于以下内容:
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
重要的部分是compileOptions
关闭。其余的是给出它属于文件的上下文。
请注意,我没有编译和测试过这个。另外,我不确定您是否同时需要sourceCompatibility
和targetCompatibility
。我建议你做一些研究和实验,以确定是否需要两者来编译和运行你想要定位的设备上的应用程序。
来源:
答案 1 :(得分:1)
首先,必须知道compile time errors和run-time errors之间的差异。
进一步阅读运行时与编译时错误:
Runtime vs Compile time
Warnings and Errors
您遇到的错误背后的原因是它不支持Java< 1.8版本。
此问题的解决方案是您应该将项目的Java版本更改为1.8
这是这样做的程序:
Using JDK 7 Or Higher With Android Studio And Eclipse On Mac OSX
我希望这会有所帮助。
答案 2 :(得分:1)
在使用Google搜索后,我意识到Android尚未正式支持JDK8。 See this link
虽然我们可以使用Retrolambda(适用于Android Studio,gradle-retrolambda)或RxJava进行JDK8风格编码,但它们只是 FLAVOR 。 ..
我的问题是由安装JDK8引起的,而不是应该安装JDK7 我认为安装JDK8是首选,因为oracle现在正式支持JDK8并已终止更新JDK7,但这是错误的想法。
在我卸载JDK8并安装JDK7之后,IDE没有警告使用lambda表达式,或者没有发生编译时-source 1.7 错误不支持lambda表达式。