• 体验方法的引用


    体验方法的引用:

    在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
    那么考虑一种情况,如果我们在Lambda中所指引的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑呢?
    答案肯定是没有必要的
    那我们又是如何使用已存在的方案呢?

    方法引用符:

    • ::该符号为引用运算符,而它所在的表达式被称为方法引用

    • Lambda表达式:usePrintable(s - > System.out.println(s));
      分析:拿到参数s之后通过Lambda表达式,传递给System.out.println方法去处理

    • 方法的引用:usePrintable(System.out::println);
      分析:直接使用System.out中的println方法来取代Lambda表达式,代码更加整洁

    推导与省略

    • 如果使用Lambda,那么根据"可推导就是可省略"的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
    • 如果使用方法引用,也是同样可以根据上下文进行推导
    • 方法的引用是Lambda的孪生兄弟

    需求:

    1. 定义一个接口(Printable),里面重新定义一个抽象方法;void PrintString(String s);
    2. 定义一个测试类(PrintableDemo),在测试类中提供两个方法
      一个方法是usePrintable(Printable p)
      一个方法是主方法,在方法中调用usePrintable方法
    3. 代码:
      PrintableDemo类
    package Demo;
    /*
    体验方法的引用:
    在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
    那么考虑一种情况,如果我们在Lambda中所指引的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑呢?
    答案肯定是没有必要的
    那我们又是如何使用已存在的方案呢?
    
    
    
          需求:
               1.定义一个接口(Printable),里面重新定义一个抽象方法;void PrintString(String s);
               2.定义一个测试类(PrintableDemo),在测试类中提供两个方法
                    一个方法是usePrintable(Printable p)
                    一个方法是主方法,在方法中调用usePrintable方法
    
    
         方法引用符:
         * ::该符号为引用运算符,而它所在的表达式被称为方法引用
    
         * Lambda表达式:usePrintable(s - > System.out.println(s));
         分析:拿到参数s之后通过Lambda表达式,传递给System.out.println方法去处理
    
         * 方法的引用:usePrintable(System.out::println);
         分析:直接使用System.out中的println方法来取代Lambda表达式,代码更加整洁
    
    推导与省略
    * 如果使用Lambda,那么根据"可推导就是可省略"的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
    * 如果使用方法引用,也是同样可以根据上下文进行推导
    * 方法的引用是Lambda的孪生兄弟
     */
    public class PrintableDemo {
        public static void main(String[] args) {
            //用Lambda表达式写
            usePrintable(s -> System.out.println(s));
    
            //用方法的引用进行填写    方法引用符号:    ::
            usePrintable(System.out::println);
        }
    
        private static void usePrintable(Printable p){
            p.PrintString("时长两年半的iKun");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    Printable接口

    package Demo;
    
    public interface Printable {
        void PrintString(String s);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出的内容:
    时长两年半的ikun

  • 相关阅读:
    浅析前端的堆栈原理以及深浅拷贝原理
    深度干货 | 38道Java基础面试题 (1.2W字详细解析)
    【MFC】实现简单UDP通信
    R语言自定义颜色
    SpringData MongoDB学习总结
    鸿蒙HarmonyOS开发 preferences首选项
    C++中多态的使用和建立条件
    Java 基础三:使用Velocity模板生成 xml
    Blazor Bootstrap 组件库语音组件介绍
    实验五:Java多线程程序设计
  • 原文地址:https://blog.csdn.net/o676448/article/details/125451040