User类
package com.ven.java8.method.references;
/**
* 方法的引用
*
* @author xiaowen0623
*
*/
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
/**
* 静态方法
* @param car
*/
public static void collide(final User user) {
System.out.println("Collided " + user.getName());
}
public void follow(final User another) {
System.out.println("Following the " + another.getName());
}
public void repair() {
System.out.println("Repaired " + this.toString());
}
}
CreateFactory创建对象工厂接口
package com.ven.java8.method.references;
import java.util.function.Supplier;
/**
* 创建对象的工厂
*
* @author xiaowen
*
*/
public interface CreateFactory {
/**
* 通过Supplier函数接口创建对象
*
* @param <T>
* @param supplier
* @return
*/
public static <T> T create(final Supplier<T> supplier) {
return supplier.get();
}
}
测试:
package com.ven.java8.method.references;
import java.util.Arrays;
import java.util.List;
/**
* 测试方法或构造函数引用
* @author xiaowen0623
*
*/
public class TestMethodReferences {
public static void main(String[] args) {
//第一种引用 构造方法引用,语法是:Class::new ,
//对于泛型来说语法是:Class<T >::new,请注意构造方法没有参数:
User user = CreateFactory.create(User::new);
user.setName("xiaowen");
user.setAge("11");
List<User> users = Arrays.asList(user);
System.out.println("大家好!我是"+users.get(0).getName()+" 今年"+users.get(0).getAge());
//第二种 静态方法引用
//语法是:Class::static_method请注意这个静态方法只支持一个类型为user的参数。
users.forEach(User::collide);
//第三种是类实例的方法引用,语法是:Class::method请注意方法没有参数
users.forEach(User::repair);
//第四种是引用特殊类的方法
//语法是:instance::method,请注意只接受user类型的一个参数
final User police = CreateFactory.create(User::new);
users.forEach( police::follow );
}
}