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改成PhoneBuildergetphone()改成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
相关产品推荐
相关产品推荐

