跳至主要內容

方法引用

cylin...大约 1 分钟

方法引用

方法引用是一种简化Lambda表达式的语法结构,它提供了一种更简洁的方式来调用已经存在的方法。方法引用可以替代某些Lambda表达式,使得代码更加简洁易读

方法引用的语法形式是 ::,它可以用来引用以下几种类型的方法:

  1. 静态方法
  2. 实例方法
  3. 构造方法
  • 静态方法引用:ClassName::staticMethodName
  • 实例方法引用:
    • 实例方法引用:instance::methodName
    • 类名::实例方法名
  • 构造方法引用:ClassName::new

2. 示例

2.1 对象名:方法名

public static void main(String[] args) {
	Date now = new Date();
	Supplier<Long> supplier = ()->{return now.getTime();};
	System.out.println(supplier.get());
    
// 然后我们通过 方法引用 的方式来处理
	Supplier<Long> supplier1 = now::getTime;
	System.out.println(supplier1.get());
}

方法引用的注意事项

  1. 被引用的方法,参数要和接口中的抽象方法的参数一样
  2. 当接口抽象方法有返回值时,被引用的方法也必须有返回值

2.2 类名::静态方法名

public class FunctionRefTest04 {
	public static void main(String[] args) {
		Supplier<Long> supplier1 = ()->{
			return System.currentTimeMillis();
		};
		System.out.println(supplier1.get());
        
		// 通过 方法引用 来实现
		Supplier<Long> supplier2 = System::currentTimeMillis;
		System.out.println(supplier2.get());
	}
}

2.3 类名::引用实例方法

2.4 类名::构造器

public class FunctionRefTest06 {
	public static void main(String[] args) {
		Supplier<Person> sup = ()->{return new Person();};
		System.out.println(sup.get());
        
		// 然后通过 方法引用来实现
		Supplier<Person> sup1 = Person::new;
		System.out.println(sup1.get());
		BiFunction<String,Integer,Person> function = Person::new;
		System.out.println(function.apply("张三",22));
	}
}

2.5 数组::构造器

public static void main(String[] args) {
	Function<Integer,String[]> fun1 = (len)->{
	return new String[len];
	};
	String[] a1 = fun1.apply(3);
	System.out.println("数组的长度是:" + a1.length);
	// 方法引用 的方式来调用数组的构造器
	Function<Integer,String[]> fun2 = String[]::new;
	String[] a2 = fun2.apply(5);
	System.out.println("数组的长度是:" + a2.length);
}