黑马程序员技术交流社区
标题:
[成都校区]+函数式编程
[打印本页]
作者:
zhanglei_
时间:
2019-4-25 09:03
标题:
[成都校区]+函数式编程
// 接口
public interface
Printer {
void
printUpperCase(String s);}// 测试类
public class
PrinterDemo {
public static void
main(String[] args) {
// lambda
// usePrinter(s-> System.out.println(s.toUpperCase()));
// 引用对象的实例方法
// 方法引用符可以自动匹配参数
// 这里体现了函数式编程区别于面向对象的特点
// 按照面向对象的思想;usePrinter()应该传入Printer接口的实现类对象
// 但是这里传入的是:new PrintString()::printUpper 这里可以理解为传入了一个函数
// 而传入这个函数的目的就是为了接收方法体中传入的参数"helloWorld",进行实现函数的功能
// 这里突破了面向对象编程的限制:usePrintString()方法中并不一定要Printer接口的实现类,任何其它类的的方法引用都可以,
// 只要该方法可以接收String类型的参数,这极大增加了编码的灵活性!
usePrinter
(
new
PrintString()::printLower);
}
static void
usePrinter(Printer p){
p.printUpperCase(
"HelloWorld"
);}
}-----------------------------------------------------------------------------------------
public class
MyStringDemo {
public static void
main(String[] args) {
// useMyString((s,x,y)->{
// return s.substring(x,y);
// });
// 简写
useMyString
((s,x,y)-> s.substring(x,y));
// 这里有一点特殊的是:在引用对象的实例方法和类的静态方法时
// 只需要传入参数既可以,不需要另外的对象,而在引用类的实例方法时,
// 需要通过对象来调用。
// 故在ms.mySubString("helloworld",2, 5 )中
// 第一个参数即成为了调用substring()方法的对象,而2和5就成为了substring()的参数
// useMyString(String::substring);
}
public static void
useMyString(MyString ms){
String s = ms.mySubString(
"helloworld"
,
2
,
5
);
System.
out
.println(s);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2