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
你的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)