蔡香满屋
站在牛顿头上吃苹果

构造方法引用语法如: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);

  

 
posted on 2020-03-03 23:05  蔡香满屋  阅读(643)  评论(0)    收藏  举报