Java日志十四「方法引用」

**

方法引用

**
方法引用优化Lambda表达式,如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么可以通过双冒号来引用该方法作为Lambda表达式的替代者。

这样可能比较抽象,我们直接看一个例子

我们先定义一个函数式接口

@FunctionalInterface
public interface Myinterface {
	public void print(String s);
}

一个方法,函数式接口作为参数

public static void printSome(Myinterface mi) {
		mi.print("Hello");
}

写这两个的原因是我们要使用Lambda表达式,下面使用方法引用

public static void main(String[] args) {
	printSome(System.out::println);//方法引用
}

结果

Hello

这个结果可能不出乎我们的意料,但是为什么可以这样用呢?

前面说过,方法引用简化了Lambda表达式,而printSome方法的括号里面本来就是要传递一个Lambda表达式的,而这个Lambda表达式要表达的函数方案(打印Hello)已经存在于某个方法(printSome)的实现中,所以我们可以通过双冒号来引用该方法作为Lambda表达式的替代者。

在介绍方法引用的一些常用的用法之前,先定义一个类和一个函数式接口(为了演示用的)

public class MyClass {
	
	private String name;
	
	MyClass()
	{
		
	}
	
	MyClass(String name)
	{
		this.name=name;
	}
	
	public String getName() 
	{
		return this.name;
	}
	
	public void toUpperCase(String str) 
	{
		System.out.println(str.toUpperCase());
	}
	
	public static void toLowerCase(String str) 
	{
		System.out.println(str.toLowerCase());
	}

}

函数式接口

@FunctionalInterface
public interface MyInterface2 {
	
	public MyClass builder(String s);
}

下面介绍一下方法引用的一些常用的用法:
1.通过对象名引用成员方法

public static void main(String[] args) {
	/*
	对象已经存在(mc)
    成员方法已经存在(toUpperCase)
	引用号(::)
	*/
	MyClass mc=new MyClass();
	printSome(mc::toUpperCase);
}

结果

HELLO

2.通过类名引用静态成员方法

public static void main(String[] args) {
	/*
	类已经存在(MyClass)
	静态成员方法已经存在(toLowerCase)
	引用号(::)
	*/
	MyClass mc=new MyClass();
	printSome(MyClass::toLowerCase);
}

结果

hello

3.通过类名调用构造方法

 public static void main(String[] args) {
	 /*
	 类名(MyClass)
	 构造方法(new)
	 引用号(::)
	 */	
	String name=printName(MyClass::new);
	System.out.println(name);
}

public static String printName(MyInterface2 mi2){
	return new MyClass("gfx").getName();
}

结果

gfx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值