A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanglei_ 初级黑马   /  2019-4-25 09:03  /  700 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

// 接口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);
    }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马