当前位置: 首页 > 知识库问答 >
问题:

用lambda表达式中的参数调用构造函数[重复]

郁光熙
2023-03-14
public class Employee {

    private Long id;
    private String name;
    private String externalId;

    public Employee(Long id, String name, String externalId) {
        this.id = id;
        this.name = name;
        this.externalId = externalId;
    }

    //getters, setter
}
private void performEmployeeProcessing() {
    Long employeeId = 2L;
    Object o = Optional.ofNullable(employeeService.getById(employeeId))
        .orElseGet(Employee::new, 1L, "", "");

    System.out.println(o);
}

上面写着编译错误

Employee::new、1L、“”、“
无法解析构造函数。

共有1个答案

吴胜
2023-03-14

使用供应商:

.orElseGet(() -> new Employee( 1L, "", ""));

仅供参考,Employee实例仅在实际需要时才会创建。

如果构造函数没有arg,则可以使用方法引用employee::new。如果创建工厂方法,则仍然可以使用方法引用:

class Employee {
    // rest of class
    public static Employee createDummy() {
        return new Employee( 1L, "", "");
    }
}
.orElseGet(Employee::createDummy);
 类似资料:
  • 问题内容: 我想为MySortedSet调用一个构造函数,该构造函数将Comparator c作为参数。我该如何修改呢? 问题答案: 如果要传递其他捕获的值作为参数,则不能使用方法引用。您将不得不使用lambda表达式来代替: =>

  • 我正在尝试在Java中使用Lambda表达式来理解以下方法参考代码: 我的问题是,为什么函数sameTemp只有一个参数?接口声明它必须有2个参数,所以对我来说没有意义。也许hTemp实例变量对这两个都足够了?我从Java完整参考书中获得了这一点,作者在那里解释了这一点: 块引用 在程序中,请注意HighTemp有两个实例方法:

  • 问题内容: 不久前,我遇到了比我更好的竞争性答案,我的答案是使用全新的方法代替lambda。 我查看了有关方法引用的Oracle规范,并定义了4种类型: 引用静态方法 引用特定对象的实例方法 引用特定类型的任意对象的实例方法 引用构造函数 我很难将这一分类。我还没有找到关于SO的任何问题或文档中说明的任何相关问题。如何将其翻译为匿名课程? 我的怀疑是: …我不知道这怎么可能。乍一看,我想表达的是:

  • 鉴于 IntelliJ IDEA 2016.1.1报告“可以替换为方法引用”。 我知道无参数构造函数的< code>Foo::new语法,但是不知道如何将< code>foo作为参数传入。我肯定漏掉了什么。

  • 我有一个 Scala 类,它使用 Apache Spark 中的 MR 作业返回输入类型 IN 的最大值。如果我从Scala调用它,这个类工作正常,它的工作原理如下: 现在我想让它也可以从java中调用,但是我在传递隐式参数时遇到了一些困难。我知道隐式参数可以通过在Java中将它们追加到参数列表中来传递,但是隐式参数是在Scala中。因此,我正在努力做到以下几点: 然后可以从java调用: 我尝试

  • 我有一个有两个构造函数的类。 有一个具有两个构造函数的类Sample。需要在Sample类中实例化另外三个类(ClassOne,ClassTwo和ClassIII)。所有三个类都包含默认和参数化构造函数。如果调用了Sample类的默认构造函数,则应调用ClassOne,ClassTwo和ClassIII的默认辅助构造函数。如果调用Samples参数化构造函数,则调用ClassOne、ClassII