网站建设好卖吗,苏州好的做网站的公司,seo优化培训公司,建筑工程网校官网2 方法引用
在使用Lambda表达式的时候#xff0c;我们实际上传递进去的代码就是一种解决方案#xff1a;拿参数做操作那么考虑一种情况: 如果我们在Lambda中所指定的操作方案#xff0c;已经有地方存在相同方案#xff0c;没有必要再写重复逻辑#xff0c;如usePrintable…2 方法引用
在使用Lambda表达式的时候我们实际上传递进去的代码就是一种解决方案拿参数做操作那么考虑一种情况: 如果我们在Lambda中所指定的操作方案已经有地方存在相同方案没有必要再写重复逻辑如usePrintable(s - System.out.println(s));中System.out.println(s)就是重复逻辑可以通过方法引用来使用已经存在的方案
2.1 方法引用符 方法引用符 :: 该符号为引用运算符而它所在的表达式被称为方法引用 对比分析 Lambda表达式usePrintable(s - System.out.println(s)); 分析拿到参数s之后通过Lambda表达式传递给System.out.println()方法去处理方法引用usePrintable(System.out:println);//隐含了把s参数给println方法 分析直接使用System.out中的println方法来取代Lambda,代码更加的简洁 推导与省略 如果使用Lambda,那么根据可推导就是可省略”的原则无需指定参数类型也无需指定的重载形式它们都将被自动推导如果使用方法引用也是同样可以根据上下文进行推导方法引用是Lambda的李生兄弟可以使用Lambda表达式就可以使用方法引用 范例
package test;public class Demo {public static void main(String[] args) {//Lambda表达式usePrintable(i - {System.out.println(i); //888});//方法引用usePrintable(System.out::println); //888}private static void usePrintable(Printable p) {p.printInt(888);}
}2.2 引用类方法 常用方法引用 引用类方法引用类的实例方法成员方法引用对象的实例方法引用构造器 引用类方法其实就是引用类的静态方法 格式类名::静态方法 范例Integer::parselnt Integer类的方法public static int parseInt(String s)将此String转换为int类型数据 练习 接口类
package test;public interface Converter {int convert(String s);
}测试类
package test;public class Demo {public static void main(String[] args) {
// useConverter(s - {
// return Integer.parseInt(s);
// });useConverter(s - Integer.parseInt(s)); //666//引用类方法useConverter(Integer::parseInt); //666//Lambda表达式被类方法替代时他的形式参数全部传给静态方法做参数;如s字符串传递给parseInt方法}private static void useConverter(Converter c) {int number c.convert(666);System.out.println(number);}
}2.3 引用类的实例方法成员方法 引用类的实例方法其实就是引用类中的成员方法 格式类名::成员方法 练习 接口
package test;public interface MyString {String mySubString(String s,int x,int y);
}测试类
package test;public class Demo {public static void main(String[] args) {
// useMyString((String s,int x,int y)-{
// return s.substring(x, y); //llo
// });useMyString((s,x,y)- s.substring(x, y)); // //llo//引用类中的实例方法useMyString(String::substring); //llo//Lambda表达式中的形式参数(s,x,y)//第一个参数作为调用者//后面的参数全部传给实例方法作为参数}public static void useMyString(MyString m) {String s m.mySubString(HelloWorld, 2, 5);System.out.println(s);}
}2.4 引用对象的实例方法成员方法 引用对象的实例方法其实就引用类中的成员方法 格式对象名::成员方法 范例HelloWorld::toUpperCase String类中的方法public String toUpperCase()将此String所有字符转换为大写 练习 PrintString类
package test;public class PrintString {//把字符串转换成大写public void printUpper(String s) {String result s.toUpperCase();System.out.println(result);}
}接口
package test;public interface Printer {void printUpperCase(String s);
}测试类
package test;public class Demo {public static void main(String[] args) {
// usePrinter((String s ) - {String result s.toUpperCase();System.out.println(result); //HELLO
// System.out.println(s.toUpperCase());
// });usePrinter(s - System.out.println(s.toUpperCase()));//引用对象的实例方法PrintString ps new PrintString();usePrinter(ps::printUpper); //HELLO}public static void usePrinter(Printer p) {p.printUpperCase(hello);}
}2.5 引用构造器 引用构造器就是引用构造方法 格式类名::new 范例Student::new 练习 测试类
package test;public class Demo {public static void main(String[] args) {
// useStudentBuilder((String name,int age) - {Student s new Student(name,age);return s;
// return new Student(name,age); //
// });useStudentBuilder((name, age) - new Student(name, age));useStudentBuilder(Student::new); //小黑,10//Lambda表达式被引用构造器代替时他的形式参数全部传递给构造器作为参数}public static void useStudentBuilder(StudentBuilder sb) {Student s sb.build(小黑, 10);System.out.println(s.getName() , s.getAge());}
}