Java8 : About Functional Interface

标签 java lambda java-8 method-reference functional-interface

我想问一下下面一段与函数式接口(interface)相关的代码。 我很困惑:

Rideable rider = Car :: new

它是在创建一个Rideable(接口(interface))还是Car(类)实例? 如果它正在创建一个 Car 对象,构造函数 new Car()(即没有参数)应该不存在,那么这怎么会有效?

我一直在阅读 this tutorial , 但还是想不通。

@FunctionalInterface 
interface Rideable {
  Car getCar (String name);
}

class Car {
  private String name;

  public Car (String name) {
    this.name = name;
  }
}

public class Test {
  public static void main(String[] args) {
    Rideable rider = Car :: new; 
    Car vehicle = rider.getCar("MyCar");
  }
}

最佳答案

Is it creating a Rideable (interface) or Car (class) instance?

它正在创建(实现的类)Rideable 接口(interface)的实例。

Rideable 功能接口(interface)有一个方法 - getCar - 它接受一个 String 参数并返回一个 Car 实例。

public Car (String name) 构造函数接受一个 String 参数并生成一个 Car 实例。

因此,方法引用 Car::new(在本例中不引用无参数构造函数)可以用作 Rideable 接口(interface)的实现。

如果有助于澄清混淆,这里有一个等同于 Car::new 方法引用的 lambda 表达式:

Rideable rider = (String s) -> new Car(s);

Rideable rider = s -> new Car(s);

关于Java8 : About Functional Interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498069/

相关文章:

c# - 来自 lambda 的带有构造函数参数的 RelayCommand

c# - 我如何保留稍后将传递给 OrderBy 或 LoadWith 函数的 lambda 表达式的引用?

java - CompletableFuture 异步执行多个数据库查询

Java 8 流映射,将 null 保留为 null

java - 试图让 JFormattedtextfield 改变......不工作

c++ - 该标准是否指定按值捕获的 lambda 是捕获父对象,还是仅捕获被访问的成员?

java - 如何使用java并行流代替executorThreadsPool?

java - JAVA中如何组合两种方法?

java - 在 Java 中合并队列

java - java中以下代码中出现空指针异常的原因是什么?