当前位置: 首页 > news >正文

java 方法引用

1. 什么是方法引用?

方法引用是 Java 8 引入的一个新特性,它是 Lambda 表达式 的简洁形式。方法引用允许直接引用已有的方法而不需要像 Lambda 表达式那样写出方法体。通过方法引用,你可以更简洁地编写函数式接口的实现。

方法引用的语法格式是:

ClassName::methodName

方法引用主要有四种类型,分别是:

  • 静态方法引用:
  • 实例方法引用(特定对象):
  • 实例方法引用(任意对象):
  • 构造方法引用:

2. 方法引用的类型及示例

1. 静态方法引用(引用类方法)

引用类方法,其实就是引用类的静态方法
格式

类名::静态方法
静态方法引用用于引用类的静态方法。其语法为 ClassName::methodName

import java.util.*;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 使用方法引用来调用静态方法
        names.forEach(MethodReferenceExample::printName);
    }

    // 静态方法
    public static void printName(String name) {
        System.out.println(name);
    }
}

这里,MethodReferenceExample::printName 是对 printName() 方法的引用,相当于 name -> printName(name)。

2. 实例方法引用(特定对象)

引用对象的实例方法,其实就引用类中的成员方法

格式

对象::成员方法

实例方法引用用于引用某个特定对象的方法。其语法为 instance::methodName

import java.util.*;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        MethodReferenceExample example = new MethodReferenceExample();

        // 使用方法引用来调用实例方法
        names.forEach(example::printName);
    }

    // 实例方法
    public void printName(String name) {
        System.out.println(name);
    }
}

这里,example::printName 是对 printName() 实例方法的引用,相当于 name -> example.printName(name)。

3. 实例方法引用(任意对象)

实例方法引用可以用于引用任意对象的实例方法(通常是接口的方法)。其语法为 ClassName::methodName,但是引用的对象是任意一个类的实例。

import java.util.*;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 使用方法引用来调用任意对象的实例方法
        names.forEach(String::toUpperCase);  // 使用 String 类的 toUpperCase 方法
    }
}

4. 构造方法引用

构造方法引用用于引用构造函数,常用于创建对象。其语法为 ClassName::new

import java.util.*;

public class MethodReferenceExample {
    public static void main(String[] args) {
        // 使用构造方法引用
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 使用构造方法引用创建新的对象
        List<Person> people = names.stream()
                                    .map(Person::new) // Person类的构造方法引用
                                    .collect(Collectors.toList());

        // 打印输出
        people.forEach(person -> System.out.println(person.getName()));
    }

    static class Person {
        private String name;

        // 构造方法
        public Person(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }
}

在这个示例中,Person::new 是对 Person 类构造方法的引用,相当于 name -> new Person(name)。

3. 方法引用的使用场景

  • 代码简洁:当 Lambda 表达式仅仅是调用现有方法时,使用方法引用可以提高代码可读性。
  • 函数式编程:在 Java 8 中,方法引用和 Lambda 表达式是结合使用的,它们使得函数式编程更容易实现。
  • 接口实现:如果你有一个接口方法且有已有的方法能够实现该方法,可以使用方法引用来直接将接口方法与已有的方法关联。

相关文章:

  • 【Unity动画】导入动画资源到项目中,Animator播放角色动画片段,角色会跟随着动画播放移动。
  • C++ 如何销毁进程
  • 在Windows和Linux平台上使用c++获取文件当前路径
  • [AI相关]Unity的C#代码如何简写
  • 探索JavaScript网页设计的无限可能:从基础到AI集成
  • ChatBox对接DeepSeek R1大模型
  • wordpress企业官网建站的常用功能
  • golang channel底层实现?
  • hot100——11,42
  • python爬虫系列课程3:解决爬虫过程中遇到的编码问题
  • Windows逆向工程入门之调用约定
  • Python logging 库全面指南
  • Skibidus and Fanum Tax (easy version)----Skibidus 和 Fanum 税(简易版)
  • 第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)
  • 利用acme.sh 申请 Google 免费证书
  • 人车检测与计数系统(python+课程设计报告+源代码+数据集)
  • LeetCode 98.验证二叉搜索树
  • vscode远程报错:Remote host key has changed,...
  • 软件安全测试技术系列|跨站脚本攻击(Cross Sites Script)类漏洞攻击方式与防御措施
  • Opencv项目实战:26 信用卡号码识别与类型判定
  • 巴基斯坦全面恢复领空开放
  • “拼好假”的年轻人,今年有哪些旅游新玩法?
  • 深圳市政协原副主席王幼鹏被“双开”
  • 人民日报刊文:守护“技术进步须服务于人性温暖”的文明底线
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?
  • “毛茸茸”的画,诗意、温暖又治愈