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

Java建造者模式实现报错求助:类型不匹配问题排查

问题排查:建造者模式中类型不匹配的报错解决

嘿,这个问题其实很好解决——咱们先揪出报错的根源:

你在Test类里写的这条语句:

Phone p = new Phonebuilder().setBattery(9000).setModel("M31").setOs("Android");

链式调用后返回的是Phonebuilder类型的对象,但你却把它赋值给了Phone类型的变量p,这就直接触发了类型不匹配的编译错误。

解决方法

只需要在链式调用的最后加上建造者类里的getphone()方法,让它生成并返回真正的Phone对象就行:

public class Test {
    public static void main(String[] args) {
        // 加上.getphone()获取Phone对象
        Phone p = new Phonebuilder().setBattery(9000).setModel("M31").setOs("Android").getphone();
        System.out.println(p);
    }
}

额外的编码规范优化(可选但推荐)

按照Java的命名规范,类名要使用大驼峰,方法名用小驼峰,所以建议你调整两处命名:

  • Phonebuilder 改成 PhoneBuilder
  • getphone() 改成 getPhone()

修改后的建造者类示例:

public class PhoneBuilder {
    private String model;
    private String os;
    private int ram;
    private double screensize;
    private int battery;

    public PhoneBuilder setModel(String model) {
        this.model = model;
        return this;
    }

    public PhoneBuilder setOs(String os) {
        this.os = os;
        return this;
    }

    public PhoneBuilder setRam(int ram) {
        this.ram = ram;
        return this;
    }

    public PhoneBuilder setScreensize(double screensize) {
        this.screensize = screensize;
        return this;
    }

    public PhoneBuilder setBattery(int battery) {
        this.battery = battery;
        return this;
    }

    public Phone getPhone () {
        return new Phone(model, os, ram, screensize, battery);
    }
}

对应的Test类调用也同步调整:

Phone p = new PhoneBuilder().setBattery(9000).setModel("M31").setOs("Android").getPhone();

这样不仅解决了报错,代码也更符合Java社区的编码习惯,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:57:49