黑马程序员技术交流社区

标题: [成都校区]+函数式编程 [打印本页]

作者: 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