【问题标题】:Performing filtering over setter method?通过setter方法执行过滤?
【发布时间】:2013-01-10 22:04:08
【问题描述】:

我需要对 setter 方法进行一些过滤并考虑修改它们,例如:

class Dog{
    int speed;

    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        if(speed < 100)
            this.speed = speed;
        else
            this.speed = 100;
    }
} 

我不记得有任何这样的实现,它可能不合法(或至少不正确)。而不是这个,我应该编写名为setFilteredSpeed(int speed) 的附加setter 方法,将setSpeed(int speed) 保留为默认值吗?这种方式似乎不是破豆的方式。

class Dog{
    int speed;

    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        this.speed = speed;
    }
    public void setFilteredSpeed(int speed) {
        if(speed < 100)
            setSpeed(speed);
        else
            setSpeed(100);
    }
} 

第三个选项是像这样准备单独的过滤器类:

class DogFilter{

    public int doSpeed(int speed) {
        if(speed < 100)
            return speed;
        else
            return 100;
    }
}

class Main(){
    public static void main(){
        Dog dog = new Dog();
        dog.setSpeed(DogFilter.doSpeed(165));
    }
}

我认为这是常见的用法;但第二种选择似乎更接近 OOP 方法。哪种方式是正确的方式?

【问题讨论】:

    标签: java oop javabeans setter getter-setter


    【解决方案1】:

    假设您确实想要完全防止无效速度,您的第一个选择是正确的方法

    【讨论】:

    【解决方案2】:

    如果speed 应该永远高于 100,第一个解决方案就足够了。对于其他两种解决方案,您需要确保所有可能设置无效(过高)speed 的类都使用适当的方法,这很容易出错。

    【讨论】:

      猜你喜欢
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多