【问题标题】:Java weird operator ()-> meaning and String operations [duplicate]Java奇怪的运算符()->含义和字符串操作[重复]
【发布时间】:2014-03-31 14:18:27
【问题描述】:

今天我遇到了一些我看不懂的奇怪代码。

这样的意思是什么()-> 例如

method( ()-> System.out.println("Hello") );

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

[AB][CD]*EF+(X/Y)

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

ABCDEFX, 艾菲克斯, ACEFXA,

我不记得了

谁能帮帮我?

【问题讨论】:

  • 第一个是 lambda(Java 8 中的新功能);至于第二个,嗯,它是某个类的输出字符串'.toString() 方法...
  • 这是lambda expressions的语法
  • 1.那么空括号是什么意思,2. 我现在添加到问题的答案。
  • 空括号表示 lambda 没有参数
  • 您能否发布问题 #2 的确切措辞?您可能会遗漏一些重要的细节。

标签: java string operators


【解决方案1】:

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

public static interface MyFunctionalInterface {
    void m1();
}

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

public void method(MyFunctionalInterface i) { ... }

您可以使用匿名内部类来实现该接口并立即使用它:

method( new MyFunctionalInterface() {
    public void m1() {
        System.out.println("Hello");
    }
});

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

method( () -> System.out.println("Hello"); );

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

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

method2( e -> System.out.println("Hello"); );

这和这样做是一样的:

method2( new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Hello");
    }
});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2015-10-20
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多