我试图在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
答案 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());
}