在 Java 中使用 lambda 表达式设置值

问题描述 投票:0回答:1

这个问题只是出于好奇。

假设我有一个 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 function functional-interface
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.