Java中的Lambda表达式——方法引用和构造器引用

731 阅读2分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

方法引用和构造器引用

方法引用就是把快速的把一个Lambda表达式的的实现指向一个已经实现了的方法。

Lambda表达式支持下面几种方法引用和构造器引用

1. 引用类方法
    用法:类名::类方法   对应的Lambda表达式为(a,b...)->类名.类方法(a,b...)
2. 引用特定对象的方法
    用法:特定对象::实例方法   对应的Lambda表达式为(a,b...)->特定对象.实例方法(a,b...)
3. 引用某类对象的实例方法
   用法:类名::实例方法   对应的Lambda表达式为(a,b...)->a.实例方法(b...)
4. 引用构造器
   用法:类名::new   对应的Lambda表达式为(a,b...)->new 类名(a,b...)

1.类方法

首先我们来看第一种方法引用:类方法引用。
public class Test {
	public static void main(String[] args) {
		//使用Change接口创建对象
		Change change = s -> Integer.valueOf(s);
		//调用change()方法进行转换
		Integer val1= change.change("1012");
		System.out.println(val1);
		//使用引用方法代替Lambda表达式
		Change c = Integer::valueOf;
		}
}
interface Change{
	/**
	 * @param s 字符串
	 * @return 把一个字符串改为数字
	 */
	Integer change(String s);
}

2. 引用特定对象的实例方法

    //使用Lambda表达式创建对象
		Change c2 = s -> "change1".indexOf(s);
		//调用c2对象的change()方法
		Integer val3 = c2.change("100");
		System.out.println(val3);
		//使用方法引用替换Lambda表达式替换
		Change c3 = "change1"::indexOf;

3.引用某类对象的实例方法

public class Test {
	public static void main(String[] args) {
	//Lambda表达式创建对象
		MyTest mt = (a,b,c) -> a.substring(b,c);
		String str = mt.test("I Love Java",2,6);
		System.out.println(str);
		//方法引用替代Lambda表达式
		//函数接口的第一个参数作为调用者
		//后面的参数全部作为参数
		MyTest mt1 = String::substring;
	}
}
interface MyTest{
	/**
	 * @param s 要分割的字符串
	 * @param a 起始位置
	 * @param b 结束位置
	 * @return 返回分割后的String
	 */
	String test(String s, int a,int b);
} 

4.引用构造器

public class Test {
	public static void main(String[] args) {
		//Lambda表达式创建对象
		MyTest mt = a -> new JFrame(a);
		JFrame jf = mt.win("这是我的第一个Frame");
		System.out.println(jf);
		//使用构造器引用代替Lambda表达式,创建对象
		MyTest mt1 = JFrame::new;
	}
}
interface MyTest{

	/**
	 * @param title 名称
	 * @return JFrame类型
	 */
	JFrame win(String title);
}