通过setter方法执行过滤?

时间:2013-01-10 22:04:09

标签: java oop javabeans setter getter-setter

我需要对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)作为默认值吗?这种方式似乎没有破坏bean的方法。

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方法。哪种方式正确?

2 个答案:

答案 0 :(得分:2)

假设您确实希望完全阻止无效速度,您的第一个选择是正确的方法

答案 1 :(得分:1)

如果speed 从不高于100,那么第一个解决方案就足够了。使用其他两个解决方案,您需要确保所有可能设置无效(太高)speed的类使用适当的方法,这非常容易出错。