gpt4 book ai didi

java - 我怎样才能抑制匿名 new runnable() 可以用 lambda 代替

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:39 26 4
gpt4 key购买 nike

我收到“anonymous new runnable() can be replaced with lambda”警告,代码如下。

final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
sv.post(new Runnable() {

@Override
public void run() {
sv.fullScroll(ScrollView.FOCUS_DOWN);
}
});

我在谷歌上搜索得很辛苦,似乎是用 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 表达式的警告。但是我不知道怎么会……

感谢任何帮助。

最佳答案

首先,正如您所说,“anonymous new runnable() can be replaced with 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 闭包。剩下的就是给出它在文件中所属的上下文。

请注意,我还没有编译和测试这个。另外,我不确定您是否同时需要 sourceCompatibilitytargetCompatibility。我建议您进行一些研究和实验,以确定是否需要两者才能在您希望定位的设备上编译和运行您的应用。

来源:

How to set -source 1.7 in Android Studio and Gradle

Java 8 features into Android Development

关于java - 我怎样才能抑制匿名 new runnable() 可以用 lambda 代替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com