当前位置: 首页 > 知识库问答 >
问题:

在setter方法上执行过滤?

谷梁晟
2023-03-14

我需要对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));
    }
}

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

共有2个答案

东方嘉木
2023-03-14

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

唐哲
2023-03-14

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

 类似资料:
  • 我刚刚看到一些示例,其中@Autowire用于非setter方法。 我怎么称呼这个方法?像对象eference.do东西();调用这些方法时不需要参数吗? 我们什么时候在非setter方法上使用@autowire 有人能分享一些相同的样品吗?

  • 问题内容: 我已经为这个问题苦苦挣扎了一段时间,我似乎无法解决它。我已经尝试过不同的方法(Runtime.exec(),ProcessBuiler),但是似乎都没有用。 这是我的问题。我有一台经常打开的笔记本电脑。这台笔记本电脑运行一个Java工具,该工具通过usb连接到arduino,以打开和关闭房屋中的灯。我自己创建了这个程序,因此我也在做一些定期的维护工作。最近,我添加了一个从html界面重

  • 根据@autowiredjavadoc: 将构造函数、字段、setter方法或配置方法标记为由Spring的依赖项注入工具自动生成。任何给定bean类中只有一个构造函数(最大值)可以携带此注释,指示构造函数在用作Spring bean时自动连接。这样的构造函数不必是公共的。字段是在bean构造之后、调用任何配置方法之前注入的。这样的配置字段不必是公共的。配置方法可以有任意名称和任意数量的参数;每个

  • 本文向大家介绍PHP在linux上执行外部命令的方法,包括了PHP在linux上执行外部命令的方法的使用技巧和注意事项,需要的朋友参考一下 目录: 一、PHP中调用外部命令介绍 二、关于安全问题 三、关于超时问题 四、关于PHP运行linux环境中命令出现的问题 一、PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用专门函数、2>反引号、3>popen()函数打开进程,三种方法来实

  • 问题内容: 首次启动应用程序时,是否有任何Spring 3功能可以执行某些方法?我知道我可以做一些技巧来设置带有注释的方法,并且该方法在启动后立即执行,但是随后它将定期执行。 问题答案: 本文向大家介绍在Spring Boot时执行方法相关面试题,主要包含被问及在Spring Boot时执行方法时的应答技巧和注意事项,需要的朋友参考一下 如果通过“应用程序启动”来表示“应用程序上下文启动”,那么可

  • 我正在尝试实现Spring3.1缓存,正如这里和这里所解释的,但它似乎不起作用:我的方法每次都会运行,即使它被标记为@cacheable。我做错了什么? 我已经将它移动到一个带有自己配置文件的junit测试用例中,以将它与应用程序的其余部分隔离开来,但问题仍然存在。以下是相关文件: Spring-test-servlet.xml ehcache.xml 我的测试。JAVA 相关Pom条目:(spr