返回更新对象的方法的类型分析

时间:2016-03-08 17:22:15

标签: java oop

为更新对象的方法定义返回类型的以下两种方法有什么区别? (void vs Foo)

第一个:

void updateSomeFields(final Foo foo){
    foo.setBar(fancyProcessing(foo.getBar())); // and more
}

第二个:

Foo updateSomeFields(final Foo foo){
    foo.setBar(fancyProcessing(foo.getBar())); // and more
    return foo;
}

这些方法都没有在Foo中定义。

  • 其中一个与程序与OOP风格相关的差异(1对2)?
  • Java允许在方法中更改对象字段的值(即允许1.工作)。但在这种情况下他们应该改变吗?
  • 在方法2中定义本地Foo是否有意义?

更新

基于Andy Turner在fluent interfaces(面向对象的API,旨在提供更易读的代码)的领导,它回答:

在方法2中定义本地Foo是否有意义? 局部变量声明是语法糖,因为人类在深层嵌套方法调用时遇到困难。

方法级联(具体方法链接)用于中继后续调用的指令上下文很有用,但是在这个问题的范围内,Foo本身外面的方法可能返回类型既不是Foo也不是void但是包含助手班。

1 个答案:

答案 0 :(得分:2)

您的方法No.2使得在单个语句中设置多个属性变得更加容易 比如self等等

我更喜欢Approach2,因为它提供了额外的灵活性

<强>更新 这个原则违反了Java Bean规范,因此Bar.setFoo(foo).setFoo1(foo1)和其他JSP's内容可能会破坏

另见Fluent Interface

  

流畅的接口通常通过使用方法级联(具体方法链接)来中继后续调用的指令上下文来实现