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

Java编写适配多类型的同名getter提示方法重复报错如何解决

错误原因

Java 的方法签名仅由方法名和参数列表共同决定,返回值类型不属于方法签名的判定维度。你定义了两个参数列表都为空、方法名同为getPiece的方法,编译器会直接判定为方法重复。

另外你当前代码里的pieceCompo和pieceSimp用了static修饰,会导致所有Composant类的实例共享这两个属性,每次新建实例都会覆盖之前的赋值,完全不符合实例属性的设计需求,需要先去掉static修饰符。


解决方案

这里提供两种常用的实现思路,可根据业务场景选择:

方案1:修改方法名区分返回类型(最易实现,无需调整上层类结构)

直接给两个获取方法设置不同的方法名,避免签名冲突,修改后完整代码如下:

class Composant{
    int quantité;
    Composee pieceCompo;
    Simple pieceSimp;

    public Composant(Composee piece, int nombre){
        this.pieceCompo = piece;
        this.quantité = nombre;
    }

    public Composant(Simple piece, int nombre){
        this.pieceSimp = piece;
        this.quantité = nombre;
    }
    // 修改方法名区分不同返回类型
    public Composee getComposeePiece(){
        return pieceCompo;
    }
    public Simple getSimplePiece(){
        return pieceSimp;
    }
    public int getQuantite(){
        return quantité;
    }
}

使用时先判断两个属性哪个不为空,再调用对应方法取值即可。

方案2:基于公共父类统一返回(更规范,适合类结构可调整的场景)

如果Composee和Simple是同类型业务实体,可以先给它们定义一个公共父类/接口,比如命名为Piece,之后统一返回父类类型即可:

// 先定义公共父类
abstract class Piece {}
class Composee extends Piece {}
class Simple extends Piece {}

class Composant{
    int quantité;
    Piece piece;

    public Composant(Composee piece, int nombre){
        this.piece = piece;
        this.quantité = nombre;
    }

    public Composant(Simple piece, int nombre){
        this.piece = piece;
        this.quantité = nombre;
    }
    // 统一返回父类类型
    public Piece getPiece(){
        return piece;
    }
    public int getQuantite(){
        return quantité;
    }
}

使用时如果需要判断具体类型,用instanceof做类型判断再强转即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:10