如何通过Getter/Setter方法控制Java类私有成员的赋值?
解决方案:限制Shape类的颜色不能为white
你需要在带参构造器和setcolour()方法中加入判断逻辑,拒绝接收"white"值,同时修正原代码里的语法错误。
修改后的Shape类代码
public class Shape { private String colour; // 无参构造器 public Shape() { this.colour = ""; } // 带参构造器:加入颜色校验逻辑 public Shape(String colour) { if (!"white".equalsIgnoreCase(colour)) { this.colour = colour; } else { System.out.println("错误:不允许使用white颜色,请输入其他颜色"); this.colour = ""; // 设为空字符串作为默认值 } } public String getcolour() { return this.colour; } // 修改setcolour方法:加入颜色校验逻辑 public void setcolour(String colour) { if (!"white".equalsIgnoreCase(colour)) { this.colour = colour; } else { System.out.println("错误:不允许使用white颜色,请输入其他颜色"); // 保持原有颜色不变,也可根据需求改为设置默认合法颜色 } } @Override public String toString() { return String.format("Shape = colour is %s ", this.colour); } }
修正后的主类代码
public class ShapeTest { public static void main(String[] args) { // 测试1:传入white,触发错误提示 Shape s1 = new Shape("white"); System.out.println(s1); // 测试2:传入合法颜色 Shape s2 = new Shape("red"); System.out.println(s2); // 测试3:尝试通过setter设置white s2.setcolour("white"); System.out.println(s2); // 颜色仍为red,未被修改 // 测试4:设置合法颜色 s2.setcolour("blue"); System.out.println(s2); } }
关键说明
- 用
equalsIgnoreCase()是为了忽略大小写(拒绝"White"、"WHITE"这类变体),如果只需要精确匹配小写"white",改成!"white".equals(colour)即可。 - 构造器中传入white时设为空字符串,setter中保持原有颜色不变,你可根据需求调整逻辑(比如抛出异常、设置默认合法颜色)。
- 原主类
main方法参数格式错误,已修正为String[] args,类名改为更具意义的ShapeTest。
内容的提问来源于stack exchange,提问作者crawwwler
相关产品推荐
相关产品推荐

