通过lambda表达式调用System.out.println()

时间:2014-05-08 23:38:41

标签: java lambda java-8

在C#中,我可以编写以下代码:

public static Action<object> WL = x => Console.WriteLine(x);

...然后每次我想把一些东西都写到控制台我只是打电话:

WL("Some output");

使用Java 8 lambda表达式的等效代码是什么?我尝试了以下操作但它不起作用:

static void WL = (String s) -> { System.out.println(s); }

2 个答案:

答案 0 :(得分:17)

您当前的尝试不起作用,因为您尝试声明void类型的变量 - 等效的C#也会失败。您需要声明一个合适的功能接口的变量,就像在C#中使用委托类型一样。

你可以使用lambda表达式,但使用方法引用会更干净(IMO):

import java.util.function.Consumer;

public class Test {
    public static void main(String[] args) {
        Consumer<Object> c1 = x -> System.out.println(x);
        Consumer<Object> c2 = System.out::println;

        c1.accept("Print via lambda");
        c2.accept("Print via method reference");
    }
}

这里Consumer<T>接口大致相当于.NET中的Action<T>委托。

类似地,您可以在C#中使用方法组转换而不是lambda表达式:

public static Action<object> WL = Console.WriteLine;

答案 1 :(得分:1)

interface MyMethod {
    public void print(String s);
}

class Main {
    public static void main(String[] args) {
        MyMethod method = (String s) -> { };
    }
}

在java中,lambda表达式围绕功能接口;接口只包含一个方法。