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

如何让Java函数兼容两个含共同属性的不同输入类?

解决方案:使用接口实现多态复用

在Java中,你可以通过定义公共接口来约定类A和类B的共同行为,让函数F基于这个接口编写,从而实现对不同类的复用,无需重复代码。具体步骤如下:


1. 定义公共接口

创建一个接口,声明函数F需要用到的两个方法:getNumerator()和getDenominator(),任何实现该接口的类都能被F接收。

interface Fractional {
    Long getNumerator();
    Long getDenominator();
}

2. 修改类A和类B实现该接口

让类A和类B实现上述Fractional接口,由于它们已经有对应的getter方法,只需在类声明中添加接口实现即可:

class A implements Fractional {
    Long numerator;
    Long denominator;
    String firstName;
    
    // 已有的getter和setter
    @Override
    public Long getNumerator() {
        return numerator;
    }
    
    @Override
    public Long getDenominator() {
        return denominator;
    }
    
    // 其他属性的getter/setter
}

class B implements Fractional {
    Long numerator;
    Long denominator;
    String address;
    
    // 已有的getter和setter
    @Override
    public Long getNumerator() {
        return numerator;
    }
    
    @Override
    public Long getDenominator() {
        return denominator;
    }
    
    // 其他属性的getter/setter
}

3. 修改函数F的参数类型

将函数F的输入参数从Class改为Fractional接口,这样它就能接收任何实现了该接口的对象(包括A和B的实例):

Double F(Fractional input) {
    // 注意:Long直接相除会触发整数除法,转成double避免精度丢失
    return input.getNumerator().doubleValue() / input.getDenominator().doubleValue();
}

补充说明

  • 选择接口而非抽象类的原因:接口更适合单纯的行为约定,不会限制类的继承结构(Java是单继承多实现)。
  • 原代码中Long类型直接相除会丢失小数部分,调用doubleValue()转成浮点型后再计算,才能得到正确的小数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:18:10