Java8 lambda表达式之方法引用

static 方法引用

public interface Find {
	public int toFind();
}
public class MyClass {
	public static int myFind() {
		//do something...
	}
}

我们想要快捷的利用MyClass中的myFind()来实现Find接口,我们可以这样:

Find finder = MyClass::myFind();

构造方法引用

public interface Factory {
	public String create(char[] chars);
}
Factory factory = String::new;

参数方法引用

public interface Find {
	public int toFind(String s1, String s2);
}
Find finder = String::indexOf

这种用法值得注意一下,String#indexOf并不是static方法,但是却能使用String::indexOf的方式来使用,原因是toFind(String s1, String s2需要两个参数,第一个为String,第二个也是String,于是,编译器会帮你自动识别,将上面的lambda转换为:

Find finder = (s1, s2) -> s1.indexOf(s2);

String::indexOf()只需要一个参数,Find#toFind()需要两个参数,因此Find#toFind()的第一个参数可以理解为调用String::indexOf()的对象。

实例方法引用

public interface Find {
	public int toFind(String s);
}
public class MyClass {
	public int myFind(String s) {
		//do something...
	}
}
````java
Myclass obj = new MyClass();
Find finder = obj::myFind;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值