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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:05:58