java8中方法引用::
有四种类型
ClassName::New
ClassName::static_method
ClassName::instance_method
instance::instance_method
第一种是对构造函数的引用,相当于创建对象
第二种与第四种,如果有参数会把参数当方法的实参
第三种会把第一个参数当做类对象,来调用instance_method,其他参数当做方法的参数。
看下面实例代码,有方法上都有注释解释
package com.xhx.java;
import org.junit.Test;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Supplier;
public class App {
/**
* 1.构造器引用
* ClassName::New => new ClassName()
* 如果调用时有参数,相当于调用带参的构造函数
*/
@Test
public void test1(){
App.toString(User::new);
}
public static void toString(Supplier supplier){
System.out.println(supplier.get().toString());
}
/**
* 2.静态方法引用
* ClassName::static_method =》 CLassName.static_method()
* 如果调用时有参数,直接放到静态方法的形参中
*/
@Test
public void test2(){
Arrays.asList("a","b").stream().forEach(User::testStatic);
}
/**
* 特定类对方法引用
* ClassName::instance_method => obj.instance_method(xxx)
* 调用时参数:第一个参数是实体对象 上面的obj
* 如果有其他参数,会传到方法中
*/
@Test
public void test3(){
User user = new User();
user.setId("123");
user.setAge(13);
user.setName("beaufulGirl");
Optional.of(user).ifPresent(User::printString);
}
/**
* 特定对象对方法引用
* instance::instance_method =》instance.instance_method(xxxx);
* 如果有参数,参数就是方法的参数
*/
@Test
public void test4(){
User user = new User();
user.setId("123");
user.setAge(13);
user.setName("beaufulGirl");
toString(user::printString);
}
public interface MyInterface{
void doSomething();
}
public void toString(MyInterface face){
face.doSomething();
}
}
实时内容请关注微信公众号,公众号与博客同时更新:程序员星星