Java怪异操作符()->含义和字符串操作

Mar*_*ski 1 java string operators

今天我遇到了一部分我不明白的奇怪代码。

例如,这意味着什么 ()->

method( ()-> System.out.println("Hello") );
Run Code Online (Sandbox Code Playgroud)

另一个问题是,String 的输出是什么:

[AB][CD]*EF+(X/Y)
Run Code Online (Sandbox Code Playgroud)

当然没有任何 A、B 等实例。但我有这样的答案

ABCDEFX、ACEFXX、ACEFXA、

我不记得他们

有谁能够帮助我?

hel*_*cha 6

假设您有一个声明一个方法的接口:

public static interface MyFunctionalInterface {
    void m1();
}
Run Code Online (Sandbox Code Playgroud)

并且您有一个接收该类型对象作为参数的方法:

public void method(MyFunctionalInterface i) { ... }
Run Code Online (Sandbox Code Playgroud)

您可以实现该接口并使用匿名内部类立即使用它,如下所示:

method( new MyFunctionalInterface() {
    public void m1() {
        System.out.println("Hello");
    }
});
Run Code Online (Sandbox Code Playgroud)

在 Java 8 中,您可以将其替换为 lambda 表达式,例如您展示的表达式:

method( () -> System.out.println("Hello"); );
Run Code Online (Sandbox Code Playgroud)

空参数代表m1()方法,没有参数。

假设您使用的函数式接口有一个带有一个参数的方法(method2(ActionListener s) { ... }例如,如果您的方法具有表单),那么您将使用:

method2( e -> System.out.println("Hello"); );
Run Code Online (Sandbox Code Playgroud)

这与执行此操作相同:

method2( new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Hello");
    }
});
Run Code Online (Sandbox Code Playgroud)

有很多关于 Java 8 中 Lambda 表达式的教程。是一个很好的快速入门。