IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java中的方法引用::全解 -> 正文阅读

[Java知识库]Java中的方法引用::全解

?方法引用::其实就是lambda表达式的化简!!! 必须借助接口!
?按照我所引用的方法来实现这个接口中的唯一方法,谁调用它我不管,我只需要实现就行

? 一、引用类中的静态方法

?格式: 类名::静态方法。方法引用中的静态方法所接收的参数就是一个接口中唯一方法中的参数。
?只需要保证这个静态方法和所对应的接口方法参数和返回值一致就可以使用!
?形如:

		printTest( (s)-> System.out.println(s)); // lambda表示式
        printTest(System.out::println);   //方法引用

?示例1: 传入一个字符串输出

?所需接口:

public interface PrintInterface{
    void print(String s);
}

public class Test1 {

    public static void main(String[] args) {

        printTest( (s)-> System.out.println(s)); // lambda表示式
        printTest( System.out::println ); //方法引用
    }
    public static void printTest(PrintInterface p){
        p.print("Hello World");
    }
}

?示例2: 传入两个字符串输出
?所用到的接口:

public interface Printable {

    void myPrint(String s ,String s1);

}

?测试代码:

public class Test5 {

    public static void main(String[] args) {

		userPrint( (s1,s2)-> newPrint(s1,s2) );// lambda表示式
        userPrint(  Test::newPrint  ); //方法引用
        
    }
    public static void newPrint(String s , String s1){
        System.out.println(s+s1);
    }

    public static void userPrint(Printable p){
        p.myPrint("蚌埠住了!","方法引用!");
    }

}

?二、引用类中的构造方法

?格式: 类名::new
?形如:

 		Student s = testNewStu( (id,name)->new Student(id,name)  ); // lambda表示式
        Student s1 = testNewStu(Student::new);  //方法引用

?直接看例子
?示例: 实例化Student类
?所用到的接口:

public interface Stuable {

    Student newStu(int id ,String name);
}

?测试函数


public class Test3 {

    public static void main(String[] args) {
        
        Student s = testNewStu( (id,name)->new Student(id,name)  );// lambda表示式 
        Student s1 = testNewStu(Student::new); //方法引用
        System.out.println(s);


    }
    public static Student testNewStu(Stuable s){
        Student stu1 = s.newStu(1,"TTT");
        return stu1;
    }
}

在这里插入图片描述

?三、引用类的成员方法

?跟上述的大同小异,唯一区别的是,如果引用类的成员方法,则需要传入调用这个成员方法的对象也就是说接口方法第一个参数是类对象,其他参数是该成员方法的参数!
?形如:

		StringTest( (s,index)->s.charAt(index) ); // lambda表示式 
        StringTest( String::charAt );//方法引用

?示例: 调用String方法中的charAt()方法,来获取某字符

public interface Stringable {

    char getChar(String s , int index);
}

?主函数:


public class Test4 {

    public static void main(String[] args) {

        StringTest( (s,index)->s.charAt(index) );  // lambda表示式 
        StringTest( String::charAt );  //方法引用

    }
    public static void StringTest(Stringable s){
        char t = s.getChar("HelloWorld!",7);
        System.out.println(t);
    }

}

?四、引用类对象的成员方法

?格式: 类对象名::成员方法 。跟一差不多,就是变成了对象中的成员方法来引用。
?这个在Stream流中非常常见。 当引用的方法是没有参数传递时,第一个参数就是该对象调用了该对象的无参数传入的方法。
?形如:

		Test t = new Test();
        userPrint( (s1,s2)-> t.new1Print(s1,s2) );  //lambda表达式
        userPrint( t::new1Print); //方法引用

?示例: 修改以下一的示例代码
?接口

public interface Printable {

    void myPrint(String s ,String s1);

}

?主函数:


public class Test6 {
    public static void main(String[] args) {

        Test t = new Test();
        userPrint( (s1,s2)-> t.new1Print(s1,s2) ); //lambda表达式
        userPrint( t::new1Print); //方法引用

    }
    public static void userPrint(Printable p){
        p.myPrint("蚌埠住了!","方法引用!");
    }

    public void new1Print(String s , String s1){
        System.out.println(s+s1);

    }


}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:02:36  更:2022-05-07 11:03:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:41:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码