Java 为什么IntelliJ建议用Lambda表达式替换匿名Runnable?

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开发的方

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开发的方式。在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

或者,如果您只需要特定模块使用它,请再次进入
项目结构
,然后在
模块
上,单击您需要的模块,然后从
选项卡中,出现
语言级别


编辑:另外,看看这个帖子

它肯定更短更容易阅读。有趣的阅读:相关:它肯定更短更容易阅读。有趣的阅读:相关: