设置器返回实例引用。图案还是反图案?

lpinto.eu:

我在考虑代码结构,在考虑设置器。这些曾经是void方法,那么为什么不使用一些可能的返回值来启用一些新的代码结构呢?

我的想法是将所有属性设置器从void更改为实例引用,因此我们可以按顺序执行设置器或其他操作。这是一个例子:

public class MyClass {
    private int foo;
    private String bar;

    public MyClass setFoo(int foo) {
        this.foo = foo;
        return this;
    }

    public MyClass setBar(String bar) {
        this.bar = bar;
        return this;
    }

}

然后在代码的其他地方我们可以做:

...
MyClass myInstance = new MyClass();
myInstance.setFoo(auxFoo).setBar(auxBar);
...

这允许在一行中设置所有类属性,这在转换方法中很有用。

甚至:

...
return myInstance.setFoo(auxFoo);

这是我的目标,例如能够在返回错误时设置错误属性。例如,这可以简化捕获块。

编辑:一些答案后,我需要添加:

  • 问题只是关于setter(不是在所有方法中都这样做),而不是仅限于链接,而是限于return示例中的其他用法
  • 从无效到其他的变化会造成任何问题吗?例如,JavaBeans自省。
  • 您还能看到这样做的优点或缺点吗?

我希望看到一些讨论。

哈维·洛佩斯(XaviLópez):

这是一种常见的技术,称为“ 方法链接”Hibernate在其Criteria类中使用了它,并在其他流行的框架(例如Wicket)中使用了它。

通常,您必须小心并将其应用于那些void您确定永远不需要返回任何东西的方法中。而且您不应该在Java Bean中使用它,因为已经在此问题中进行了讨论:Java bean的setter是否允许返回此值?

有关使用此模式时可能有用的一些提示和缺点,请参阅此相关的SO问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章