You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中函数引用:如何引用无参无返回值的public void myMethod()方法

获取Java无参无返回值方法的引用

嘿,这个需求在Java里其实很容易实现,核心就是利用函数式接口和方法引用语法。咱们一步步来拆解:

1. 匹配方法签名的函数式接口

首先,你的public void myMethod()是无参数、无返回值的方法,所以需要找一个抽象方法签名完全匹配的函数式接口。Java内置的Runnable接口正好符合——它的run()方法就是void run(),完美适配。当然你也可以自定义函数式接口,咱们后面说。

2. 获取方法引用的两种场景

根据myMethod是静态方法还是实例方法,获取方式略有不同:

场景一:myMethod是静态方法

直接用类名::方法名的语法就能拿到引用:

public class MyClass {
    // 静态目标方法
    public static void myMethod() {
        System.out.println("执行静态myMethod");
    }

    public static void main(String[] args) {
        // 获取静态方法的引用,赋值给Runnable
        Runnable staticMethodRef = MyClass::myMethod;
        
        // 调用方法引用(本质是调用run(),会触发myMethod执行)
        staticMethodRef.run();
    }
}

场景二:myMethod是实例方法

需要先创建类的实例,再用实例对象::方法名获取引用:

public class MyClass {
    // 实例目标方法
    public void myMethod() {
        System.out.println("执行实例myMethod");
    }

    public static void main(String[] args) {
        MyClass myInstance = new MyClass();
        // 获取实例方法的引用
        Runnable instanceMethodRef = myInstance::myMethod;
        
        // 调用方法引用
        instanceMethodRef.run();
    }
}

3. 自定义函数式接口(可选)

如果你不想用内置的Runnable,可以自己定义一个符合签名的函数式接口,加上@FunctionalInterface注解(可选但推荐,能帮你检查是否符合函数式接口规范):

@FunctionalInterface
public interface MyVoidAction {
    // 抽象方法签名和myMethod完全匹配
    void execute();
}

然后同样的方式获取引用:

// 静态方法场景
MyVoidAction staticRef = MyClass::myMethod;
staticRef.execute();

// 实例方法场景
MyClass instance = new MyClass();
MyVoidAction instanceRef = instance::myMethod;
instanceRef.execute();

补充:方法引用和Lambda的关系

其实方法引用是Lambda表达式的语法糖,上面的代码也可以用Lambda代替,比如:

Runnable lambdaRef = () -> myInstance.myMethod();

但方法引用的写法更简洁直观,尤其是当方法名本身有语义的时候。

内容的提问来源于stack exchange,提问作者user5327287

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:51:33