You need to enable JavaScript to run this app. 如何使用函数参数调用指定getter,实现printDog灵活打印Dog类属性?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用函数参数调用指定getter,实现printDog灵活打印Dog类属性?

实现方案

1. printDog方法的参数类型定义

你使用dog::getName、dog::getBreed作为方法引用传参时,这两个方法的共同特征是无入参、返回字符串类型,完全匹配JDK内置的java.util.function.Supplier<String>函数式接口的签名:

  • Supplier<T>的抽象方法为T get(),和两个getter的方法定义没有任何签名冲突,不需要额外自定义接口就能直接接住两种方法引用的传参
  • 这种定义方式把“选择打印哪个属性”的逻辑完全交给调用方,方法内部不需要写任何分支判断。

2. printDog方法的内部调用逻辑

拿到传入的Supplier<String>类型参数后,只需要调用参数的get()方法,就能触发对应getter的执行、拿到属性值,直接完成打印即可。

3. 完整可运行示例

import java.util.function.Supplier;

// 已实现的Dog类
class Dog {
    private String name;
    private String breed;

    public Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }

    public String getName() {
        return name;
    }

    public String getBreed() {
        return breed;
    }
}

public class Demo {
    // 定义printDog方法
    public static void printDog(Supplier<String> propertyGetter) {
        // 调用传入的getter获取属性值并打印
        String value = propertyGetter.get();
        System.out.println("打印Dog属性:" + value);
    }

    public static void main(String[] args) {
        Dog dog = new Dog("豆豆", "柯基");
        // 按你计划的方法引用形式调用
        printDog(dog::getName);
        printDog(dog::getBreed);
    }
}

适配扩展:如果后续需要打印其他类型的属性(比如int类型的age),只需要将参数泛型调整为对应类型即可,printDog的核心逻辑不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 03:06:01