这是我参与更文挑战的第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);
}