首页 > 编程语言 >Java SE入门及基础(53)& 方法引用

Java SE入门及基础(53)& 方法引用

时间:2024-05-25 21:06:02浏览次数:17  
标签:Java String package void 53 static wq public SE

目录

方法引用

1.应用场景

示例

分析

2.方法引用符

示例

解释说明

3. 静态方法引用

语法

示例

4. 成员方法引用

语法

示例

示例

5. this 引用成员方法

语法

示例

6. super 引用父类成员方法

语法

示例

7. 构造方法引用

语法

示例


方法引用

1.应用场景

方法引用     来自官方的说明
        You use lambda expressions to create anonymous methods. Sometimes, however, a lambda expression does nothing but call an existing method. In those cases, it's often clearer to refer to the existing method by name. Method references enable you to do this; they are compact, easy-to-read lambda expressions for methods that already have a name.         你使用lambda 表达式创建匿名方法。 但是,有时 lambda 表达式除了调用现有方法外什么也不做。 在这种情况下,通常更容易按名称引用现有方法。 方法引用使你可以执行此操作;它们是紧凑的,对于已经具有名称的方法lambda 表达式更易于阅读。
示例
package com . wq . funcational ; public interface Actor {         /**         * 演员表演节目         * @param item         */         void perform ( String item );  } package com . wq . funcational ; public class ActorTest {         public static void main ( String [] args ) {                 Actor actor = item -> System . out . println ( item );                 actor . perform ( " 跳舞 " );         } }
分析
        上面的示例中,Lambda 表达式的作用就是调用 System.out 中的 println(String msg) 方法,这个方法已经有具体的实现,如果能够直接引用这个方法,那么代码将变得更为简洁。

2.方法引用符

        双冒号 :: 为方法引用符,而它所在的表达式被称为方法引用。如果 Lambda 表达式赋值的方法已经在某个类中有具体的实现,那么则可以通过双冒号来引用该方法作为Lambda 表达式的替代者。
示例
public class ActorTest {         public static void main ( String [] args ) {                 Actor actor = System . out :: println ;                 actor . perform ( " 跳舞 " );         } }
解释说明
        Actor 接口中的 void perform(String item) 方法在实现时用的 System.out 中的 public void println(String x) 方法。 Lambda 表达式可以根据实现的接口方法推导省略,方法引用也可以根据实 现的接口方法进行推导省略。 void perform(String item) 方法中带有一个字符串类型的参数,public void println(String x) 方法来实现时就可以接收这个字符串参数。         方法引用与Lambda 表达式一样,只能应用于函数式接口。方法有静态方法、成员方法和构造方法之 分,方法引用因此也分为静态方法引用、成员方法引用和构造方法引用

3. 静态方法引用

语法
类名 :: 方法名
示例
package com . wq . _static ; public interface Calculator {         int calculate ( int a , int b ); } package com . wq . _static ; public class MathUtil {         public static int add ( int a , int b ){                 return a + b ;         }         public static int minus ( int a , int b ){                 return a - b ;         }         public static int multiply ( int a , int b ){                 return a * b ;         }         public static int divided ( int a , int b ){                 return a / b ;         } } package com . wq . _static ; public class CalculatorTest {         public static void main ( String [] args ) {                                Calculator c = MathUtil :: minus ;                 int result = c . calculate ( 1 , 10 );                 System . out . println ( result );                 Calculator c1 = MathUtil :: multiply ;                 int result1 = c1 . calculate ( 1 , 10 );                 System . out . println ( result1 );         } }

4. 成员方法引用

语法
对象名 :: 方法名
示例
package com . wq . _static . member ; public interface Printable {         void print ( String msg ); } package com . wq . _static . member ; public class Printer {         public void print ( String msg ){                 System . out . println ( msg );         } } package com . wq . _static . member ; public class Computer {         private Printer printer ;         public Computer ( Printer printer ) {                 this . printer = printer ;         }         public void print ( String msg ){                 Printable printable = printer :: print ;                 printable . print ( msg );         } } package com . wq . _static . member ; public class ComputerTest {         public static void main ( String [] args ) {                 Computer c = new Computer ( new Printer ());                 c . print ( "This is method reference" );         } }
        注意:如果函数式接口的抽象方法中只有一个引用数据类型的参数,且实现过程只需要调用该类型中定义的成员方法,那么可以使用静态引用的方式直接引用该成员方法
示例
package com . wq . _static . member . _static ; public class Person {         public void sing (){                 System . out . println ( " 唱歌 " );         }         public void dance (){                 System . out . println ( " 跳舞 " );         } } package com . wq . _static . member . _static ; public interface Actor {         void perform ( Person p ); } package com . wq . _static . member . _static ; public class ActorTest {         public static void main ( String [] args ) {                 Actor a = Person :: dance ;                 a . perform ( new Person ());                 Actor actor = Person :: sing ;                 actor . perform ( new Person ());         } }

5. this 引用成员方法

语法
this :: 方法名
示例
package com . wq . _static . member . _this ; public interface Camera {         void takePhoto ( String name ); } package com . wq . _static . member . _this ; public class Person {         public void takePhoto ( String name ){                 System . out . println ( " 给 " + name + " 拍照 " ); } public void travel ( String name ){         Camera c = this :: takePhoto ;         c . takePhoto ( name );         } } package com . wq . _static . member . _this ; public class PersonTest {         public static void main ( String [] args ) {                 Person p = new Person ();                 p . travel ( " 金字塔 " );         } }

6. super 引用父类成员方法

语法
super :: 方法名
示例
package com . wq . _static . member . _super ; public interface Customer {         /**         * 交流业务         */         void communicateBusyness (); } package com . wq . _static . member . _super ; public class SoftEngineer {         public void analysisBusyness (){                 System . out . println ( " 分析业务 " );         } } package com . wq . _static . member . _super ; public class JavaProgrammer extends SoftEngineer {         public void communicateWithCustomer (){                 Customer c = super :: analysisBusyness ;                 c . communicateBusyness ();         } } package com . wq . _static . member . _super ; public class JavaProgrammerTest {         public static void main ( String [] args ) {                 JavaProgrammer programmer = new JavaProgrammer ();                 programmer . communicateWithCustomer ();         } }

7. 构造方法引用

语法
类名 :: new
示例
package com . wq . _static . constructor ; public class Student {         private String name ;         private String sex ;         public Student ( String name , String sex ) {                 this . name = name ;                 this . sex = sex ;         }         @Override         public String toString () {                 return "Student{" +                 "name='" + name + '\'' +                 ", sex='" + sex + '\'' +                 '}' ;         } } package com . wq . _static . constructor ; public interface StudentBuilder {         Student build ( String name , String sex ); } package com . wq . _static . constructor ; public class StudentBuilderTest {         public static void main ( String [] args ) {                 StudentBuilder builder = Student :: new ;                 Student stu = builder . build ( " 张三 " , " 男 " );                 System . out . println ( stu );         } }

标签:Java,String,package,void,53,static,wq,public,SE
From: https://blog.csdn.net/m0_63181360/article/details/139152534

相关文章

  • Java SE入门及基础(54)& 函数式接口
    目录1.什么是函数式接口函数式接口示例示例2.函数式编程示例3.Lambda表达式延迟执行应用场景示例4.Consumer接口解释说明示例5.BiConsumer接口解释说明示例6.Predicate接口解释说明示例练习7.Function接口解释说明示例练习1.什么是函数......
  • JavaScript事件监听
    在JavaScript中,事件监听是一种重要的机制,用于在特定事件发生时执行特定的代码。这些事件可以是用户的交互行为(如点击、鼠标移动等),也可以是浏览器的一些特定行为(如页面加载完成、窗口大小改变等)。事件监听通常使用addEventListener方法实现。以下是一个基本的示例:javascript//......
  • session
    什么是session    Session是计算机科学中的一个概念,它用来追踪与某个用户的一系列交互。在网站开发中,session通常用于存储和管理用户在网站上的登录状态和其他相关信息。当用户登录网站时,系统会为该用户创建一个session,生成一个唯一的sessionID,并将该ID存储在用户的浏......
  • IntersectionObserver的简单使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • GeoServer系统wms接口存在远程命令执行漏洞
    漏洞描述该漏洞存在于GeoServer系统的/goserver/wms接口处,攻击者可以利用该漏洞在xml中包含恶意的代码执行任意系统命令,漏洞利用了GeoServer处理WebProcessingService请求时没有正确过滤用户输入,从而导致远程命令执行漏洞。fofaicon_hash="97540678"pocPOST/geoserver/wms......
  • Java事务注解:让你的代码如丝般顺滑
    哈喽,大家好,我是木头左!一、前言作为一名Java程序员,你是否曾经在处理数据库事务时感到困惑?是否曾经因为忘记提交或回滚事务而导致数据不一致的问题?是否曾经因为事务的使用不当而影响了系统的性能?如果你的答案是肯定的,那么这篇文章将为你揭示Java事务注解的秘密,让你的代码如丝般......
  • SciTech-EECS-Sensor:TI的 4-20mA 环路供电系统实现高达 100m 的液位测量,具有高测距精
    https://www.ti.com.cn/zh-cn/featured-applications-content/sensors/mmwave-radar/industrial-mmwave-level-transmitter.html可针对4-20mA环路供电系统实现高达100m的液位测量,具有高测距精度和低功耗。我们的毫米波雷达传感器可对各种行业(包括食品和饮料、废水管理和加工......
  • JAVAEE之线程(10)_线程池、线程池的创建、实现线程池
    一线程池1.1为什么要有线程池? 线程池顾名思义是由多个线程所组成,作用就是减少线程的建立与销毁,与数据库连接池相同概念,为了减少连接与释放,从而降低消耗提升效率。1.2线程池的优势总体来说,线程池有如下的优势:降低资源消耗。通过重复利用已创建的线程降低线程创建和......
  • Java学习路线思维导图
    目录Java学习流程1.学习大纲2.Java开发中常用的DOS命令Java入门学习思维导图Java学习流程通过大纲了解学习的重点,通过目录依次深入【注:Java环境的搭建百度,提升自己百度的能力】1.学习大纲学习流程如下:Java基础语法Java的发展与特点(了解)Java语言规范(精......
  • Engage with world in another way, Strench myself. dataism已经进入房间, 等待历史
    忘记历史,你就不会被历史所羁绊,你看到的每一天都是全新的。engagewithyourlife,而不是藏在生活的后面,liveinyourlife,notbehindoraboveyourlife,notpretenttolive,justliveinit.体现物体特性的其实是分子,而不是原子。虽然游离态的原子更自由,但是原子性质更单......