这个问题只是出于好奇。
假设我有一个 Java POJO 类
@Data
public class MyDto{
private String id;
}
我们可以使用
setId(value)
设置值,但问题是,我们可以以任何方式使用 lambda 来设置值吗?
我尝试使用以下
public class Service{
Boolean internalState = false;
...
public void someMethod(String value){
MyDto dto = new MyDto();
// based on some logic, i want to assign a value (just an example)
dto.setId((internalState) -> internalState ? value : null);
// I know i can do this
if(internalState){
dto.setId(value);
}
else {
dto.setId(null);
}
...
}
...
}
我尝试使用上面的方法,但我的 IDE 对我大喊这个错误“lambda 转换的目标类型必须是接口”。我查找了这个错误,发现这与 java 中的函数接口有关。
我知道这可能不是任何实际用例,但为了更深入地了解功能接口,我们如何实现这一点?这可能吗?
java中的函数式接口是一种仅包含一个抽象方法的接口。
现在,在您的代码中, setId 方法实际上需要一个 String 值。但是,当您编写 lambda 函数时,预期的数据类型不匹配。和java中一样,lambda函数没有返回类型,主要用于实现函数式接口。
功能界面示例:
interface Show{
void display(String name);
}
....
Show s = (name) -> System.out.println(name);
s.display("John Doe");
对于您的代码,您可以简单地使用三元条件 -
dto.setId(internalState ? value : null);