Java 为什么IntelliJ建议用Lambda表达式替换匿名Runnable?
IntelliJ IDEA建议,一个可运行的表单Java 为什么IntelliJ建议用Lambda表达式替换匿名Runnable?,java,Java,IntelliJ IDEA建议,一个可运行的表单 findViewById(R.id.my_view).post(new Runnable() { @Override public void run() { Log.d("myTag", "hey"); } }); 被替换为 findViewById(R.id.my_view).post(() -> Log.d("myTag", "hey")); . 但是为什么后者更可取呢?这就是java开发的方
findViewById(R.id.my_view).post(new Runnable() {
@Override
public void run() {
Log.d("myTag", "hey");
}
});
被替换为
findViewById(R.id.my_view).post(() -> Log.d("myTag", "hey"));
.但是为什么后者更可取呢?这就是java开发的方式。在Java8中引入lambdas使代码更简洁、更不冗长。只要数一数里面的代码行就行了
@Override
public void run() {
Log.d("myTag", "hey");
}
});
及
整个方法只需一行代码。代码的输出将与较长代码中的输出相同。
您可以看看Scala,在Scala中编写lambdas和如此短的代码是非常常见的。这就是java的开发方式。在Java8中引入lambdas使代码更简洁、更不冗长。只要数一数里面的代码行就行了
@Override
public void run() {
Log.d("myTag", "hey");
}
});
及
整个方法只需一行代码。代码的输出将与较长代码中的输出相同。
您可以看看Scala,在Scala中编写lambda是非常常见的,并且这样短的代码。lambda表达式创建了一个不同的字节码,可以更轻一些。当使用匿名类时,您会告诉编译器创建一个附加类,以便稍后实例化和调用 使用lambda表达式时,告诉编译器创建对象或合成方法。 在使用局部变量的情况下,编译器将创建一个对象,并将捕获的变量传递给其构造函数,实质上是复制引用。 如果没有捕获变量,它只会创建一个私有静态方法
此外,您还可以认为lambda看起来更可读。lambda表达式创建的字节码可能更轻。当使用匿名类时,您会告诉编译器创建一个附加类,以便稍后实例化和调用 使用lambda表达式时,告诉编译器创建对象或合成方法。 在使用局部变量的情况下,编译器将创建一个对象,并将捕获的变量传递给其构造函数,实质上是复制引用。 如果没有捕获变量,它只会创建一个私有静态方法 此外,你可以说lambda看起来更具可读性。人们回答“但为什么后者更可取?”,但我会回答 “为什么IntelliJ建议用Lambda替换匿名Runnables 表情?” Intellij正在检查您设置的
项目级语言
,并尝试建议您使用该语言版本进行编码的方式。您很可能将其设置为8或更高
要更改它,请转到项目结构
(CTRL
+ALT
+SHIFT
+S
)->项目
,并将项目级语言
更改为低于8
或者,如果您只需要特定模块使用它,请再次进入项目结构
,然后在模块
上,单击您需要的模块,然后从源
选项卡中,出现语言级别
编辑:另外,看看这个帖子,人们回答“为什么后者更可取?”,但我会回答
“为什么IntelliJ建议用Lambda替换匿名Runnables
表情?”
Intellij正在检查您设置的项目级语言
,并尝试建议您使用该语言版本进行编码的方式。您很可能将其设置为8或更高
要更改它,请转到项目结构
(CTRL
+ALT
+SHIFT
+S
)->项目
,并将项目级语言
更改为低于8
或者,如果您只需要特定模块使用它,请再次进入项目结构
,然后在模块
上,单击您需要的模块,然后从源
选项卡中,出现语言级别
编辑:另外,看看这个帖子它肯定更短更容易阅读。有趣的阅读:相关:它肯定更短更容易阅读。有趣的阅读:相关: