我想问一下下面一段与函数式接口(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/