Java中FunctionalInterfaces中的Lambdas

时间:2017-09-19 08:57:06

标签: java lambda functional-interface

我试图在Java中使用lambdas,但无法理解它是如何工作的。我像这样创建了@FunctionalInterface

@FunctionalInterface
public interface MyFunctionalInterface {
    String getString(String s);
}

现在在我的代码中我使用lambda,如下所示:

MyFunctionalInterface function = (f) -> {
    Date d = new Date();
    return d.toString() + " " + person.name + " used fnc str";
};

接下来,我想利用我的function将其传递到另一个类的构造函数中并像这样使用它:

public SampleClass(MyFunctionalInterface function) {
    String tmp = "The person info: %s";
    this.result = String.format(tmp, function.getString(String.valueOf(function)));
}

为什么我需要在valueOf()使用它?我认为,谢谢你,我只能使用function.getString()

输出: Tue Sep 19 11:04:48 CEST 2017 John used fnc str

1 个答案:

答案 0 :(得分:5)

您的getString方法需要String参数,因此您无法在没有任何参数的情况下调用它。

也就是说,你的lambda表达式忽略了String参数,而是从一些person变量中获取数据(你没有显示你声明它的位置)。

也许你的功能界面应该采用Person参数:

@FunctionalInterface
public interface MyFunctionalInterface {
    String getString(Person p);
}

MyFunctionalInterface function = p -> {
    Date d = new Date();
    return d.toString() + " " + p.name + " used fnc str";
};

public SampleClass(MyFunctionalInterface function, Person person) {
    String tmp = "The person info: %s";
    this.result = String.format(tmp, function.getString(person));
}

或者,您可以从功能界面的方法中删除参数:

@FunctionalInterface
public interface MyFunctionalInterface {
    String getString();
}

MyFunctionalInterface function = () -> {
    Date d = new Date();
    return d.toString() + " " + person.name + " used fnc str";
};

public SampleClass(MyFunctionalInterface function) {
    String tmp = "The person info: %s";
    this.result = String.format(tmp, function.getString());
}