构造方法引用语法如:Person::new
首先我们定义一个Person类:
代码如:
package com.test.cgb;
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return "Person [firstName = " + firstName + ", lastName =" + lastName + "]";
}
}
接口有:
package com.test.cgb;
/**
*
* @Description: 这是一个获得Person对象的工厂接口,也是一个函数式接口
* @author: caigb
* @createTime: 2020年3月3日
* @version:
*/
public interface PersonFactory {
// 获得Person对象的方法
Person createPerson(String firstName, String lastName);
}
下面使用匿名内部类和Lambda表达式来实现需求,需求是:
想要通过工厂来获得一个Person对象,其中前提条件有:
1.有一个Person类
2.有一个获得Person对象的接口的工厂
测试类实现代码如下:package com.test.cgb;
public class ConstructionTest {
public static void main(String[] args) {
/**
* 有个需求就是想通过工厂来获得一个Person对象,其中前提条件有:
* 1.有一个Person类 2.有一个获得Person对象的接口的工厂
*/
// 第一种使用匿名内部类实现
PersonFactory factory = new PersonFactory() {
@Override
public Person createPerson(String firstName, String lastName) {
return new Person(firstName, lastName);
}
};
Person person = factory.createPerson("第一个匿名内部类名字", "第二个匿名内部类名字");
System.out.println(person);
PersonFactory factoryLambda = (firstName, lastName) -> new Person(firstName, lastName);
Person personLambda = factoryLambda.createPerson("第一个Lambda名字", "第二个Lambda");
System.out.println(personLambda);
}
}
分别打印结果为:
Person [firstName = 第一个匿名内部类名字, lastName =第二个匿名内部类名字]
Person [firstName = 第一个Lambda名字, lastName =第二个Lambda]
注意,
PersonFactory factoryLambda = (firstName, lastName) -> new Person(firstName, lastName);可以简化成:
PersonFactory factoryLambda = Person::new;
也就是
// 第三种,更加简便的Lambda表达式
PersonFactory factoryLambda1 = Person::new;
Person personLambda1 = factoryLambda1.createPerson("第一个Lambda名字", "第二个Lambda");
System.out.println(personLambda1);
浙公网安备 33010602011771号