我今天开始学习方法报价,它是lambda表达式的进一步简化版本,语法应该更简洁。
  1.方法参考
  有一个需求:
  将字符串中的所有信息转换为大写字母,然后将其打印出来。
  使用功能性编程思想编写代码。
  1.Lambda表达式编写
  ①功能界面可打印
  这是一个带有抽象方法printMsg()的自定义打印接口,用于打印信息
  ②lambda表达式
  method方法中有两个参数,lambda表达式表示接口的实现类对象。在lambda表达式中,已经编写了业务逻辑。
  什么是业务逻辑?
  我的理解是方法的内容:根据什么参数获得什么结果。
  在上面的示例中:根据传递的字符串消息(即参数msg)
  结果是将所有味精更改为大写字母(msg.toUpperCase)
  这是业务逻辑。当然,我给出的示例非常简单,实际上它必须复杂得多。
  2.方法参考
  方法引用用于替换更简洁的lambda表达式。从某种意义上说,它们具有相似的功能。
  ①方法参考
  具体格式为:newMyPrint()::printMsg
  核心是双冒号“::”,如何理解这种格式?
  可以理解,MyPrint对象正在调用printMsg方法。
  为什么可以这种方式直接使用它?因为它的逻辑已经存在,即MyPrint类中的PrintMsg方法及其业务逻辑
  ②业务逻辑
  将字符串msg更改为所有大写字母,这等效于重写MyPrint类的接口中的abstract方法。
  3.方法参考和lambda表达式:
  现在的问题来了:方法不是引用了lambda表达式的简化形式吗?您如何看待代码变得越来越麻烦?
  让我们看一下①,方法引用比lambda表达式更简单吗?
  如果使用方法引用,则无论使用多少次业务逻辑,我都只需编写一次,然后在其他时间直接调用它;
  如果使用lambda表达式,则每次调用时都要编写业务逻辑。
  因此,该方法引用的简洁之处在于不必重复编写相同的逻辑。
  通过这种方式可以理解,方法引用比lambda表达式简单得多,尤其是在业务逻辑非常复杂的情况下
  当然,方法参考的前提是:业务逻辑已经存在。
  如果逻辑已经存在,我可以使用方法参考,
  如果逻辑不存在,请乖乖地编写lambda表达式。
  二,其他方法参考
  上例中的方法引用是对象引用方法,除对象引用外,还有许多其他方法。
  1.类名参考
  如果它是静态方法,则可以使用类名直接调用该方法。
  Java的底层已经编写了很多工具类,其大多数方法都是静态方法,直接使用方法引用更为方便。
  Math是一个工具类,它具有一个静态方法abs()。
  因此,方法引用直接用类名引用了abs方法,因为其中的逻辑已经在Java的底部编写了。
  类名参考格式如下:
  lambda表达式:number->Math.abs(number)
  方法参考:Math::abs
  当然,方法参考也有局限性,例如,我现在需要绝对值的10倍。
  lambda表达式直接更改业务逻辑。
  但是无法使用方法引用,因为Java底部没有这样的业务逻辑。即使我们需要使用方法引用,我们也必须首先编写逻辑。
  2.通过此引用成员方法
  编写这样的代码只是为了获得良好的观看效果,这不是标准的做法,因此它们是一起编写的。
  此参考格式如下:
  lambda表达式:name->this.introduce(name)
  方法参考:this::introduce
  在这方面,这是此类的代表。此类中已经有一个介绍方法。然后,我使用它来引用此类中的相应方法。
  3.通过super引用成员的方法
  如果MyClass具有父类,则具有fuIntroduce方法,如果要引用此方法,则可以使用super关键字。
  用法与此相同,因此不再赘述。
  超级参考格式如下:
  lambda表达式:name->super.fuIntroduce(name)
  方法参考:super::fuIntroduce
  Super代表父类,并且父类中已经有fuIntroduce方法,然后我使用super来引用父类中的相应方法。
  4.类构造函数参考
  类结构具有以下格式:
  lambda表达式:name->newPerson(name)
  方法参考:Person::new
  Person::new等效于创建对象(newPerson())
  不要看这段代码的复杂性,实际上它等同于新对象。
  当然,对类构造函数的理解并不充分。暂时,只需记住方法引用并使用它来创建对象。
  5.数组构造函数参考
  数组也是Object的子类,因此它们也具有构造函数,但是语法略有不同。
  数组构造函数的格式如下:
  lambda表达式:length->newint[length]
  方法参考:int[]::new
  与类构造函数相同的原因:
  int[]::new等效于创建一个数组(newint[length])

posted on 2020-06-03 15:09  林口  阅读(337)  评论(0编辑  收藏  举报