Java中FunctionalInterfaces中的Lambdas

shu*_*rok 6 java lambda functional-interface

我正在尝试使用lambdas,Java但无法理解它是如何工作的.我这样创建@FunctionalInterface:

@FunctionalInterface
public interface MyFunctionalInterface {
    String getString(String s);
}
Run Code Online (Sandbox Code Playgroud)

现在在我的代码中我使用lambdaas在这里:

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

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

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

为什么我需要在valueOf()这里使用它?我认为,谢谢你,我可以使用function.getString()吗?

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

Era*_*ran 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));
}
Run Code Online (Sandbox Code Playgroud)

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

@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());
}
Run Code Online (Sandbox Code Playgroud)