关于POJO中setter的一个小疑问

编程小强 2015-08-31 01:53:07
对于POJO中getter和setter我很多时候都是用eclipse自带的自动生成出setter和getter,最近在一个写一个组件的时候突然想了个问题,为什么setter要返回void,返回this不是更好么?
这样的话,调用的时候就变成这样了:

chart = new ChartBO().setSeries(series.toArray(new Serie[] {}))
.setBackgroundColor(chartConfig.getBackgroundColor())
.setColor(chartConfig.getColor())
.setCalculable(chartConfig.isCalculable())
.setAnimation(chartConfig.isAnimation())
.setTitle(chartConfig.getTitle())
.setToolbox(chartConfig.getToolbox())
.setTooltip(chartConfig.getTooltip())
.setLegend(chartConfig.getLegend())
.setDataZoom(chartConfig.getDataZoom())
.setGrid(chartConfig.getGrid())
.setNoDataText(chartConfig.getNoDataText())
.setOthers(chartConfig.getProperties());

有没有发现这样用比那么多行的setter要优美些,
tips:
1.网上说这是函数编程也就是Java中的Builder模式
发出来大家一起探讨下,我个人比较认同我这种做法
...全文
162 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxiaobei 2015-08-31
  • 打赏
  • 举报
回复
建造者模式是对相类似的产品的构造方式的一种抽象,如联想的笔记本和戴尔的笔记本,他们的装配流程是一样的,并且各个组件也是相似的,建造者模式主要是把建造过程和组件的生成独立开,像你上面那种setter的连缀用法,你setter内部的实现和setter的调用顺序其实就是一个产品的建造过程,而setter中new的参数就是组件的生成,这就是建造者模式的核心思想,因为setter的顺序不一定所以你只是没有把建造过程写死,而是活用了,这种连缀调用,在hibernate中有大量的实现你可以看一下,在javascript中同样有大量的实现,之所有很多时候返回void而不是this,因为很多框架,例如spring,在进行setter注入的时候,要求返回void,因为在spring中是通过反射调用,所以用连缀的意义不大,因为不是想上面那样调用的。
解开者 2015-08-31
  • 打赏
  • 举报
回复
引用 3 楼 l2tp1012 的回复:
[quote=引用 2 楼 windowsoahil 的回复:] 好像真没什么不行的……上网找了一圈,没发现哪个规范说setter必须返回void,因为返回值不属于方法签名的一部分,这么做也不会引起反射方面的问题…… 不过这么一大堆属性,不考虑用内省机制去映射吗?手写略麻烦啊
规范中是没有,但是看很多人的代码都是返回void,eclipse自动生成的代码也是返回void,我觉得这种写法在对对象设置属性的时候真心不好用[/quote] 其实大部分对getter/setter的调用都不是手写代码的方式,比如bean内省、jsp标签库、Spring注入等应用场合,都是通过反射机制在类库内部调用的。改成返回this毕竟只是手动调用起来方便,我觉得还是先试试看这么做会不会造成框架出问题,没问题的话我觉得没什么不行的。不过最好还是先请示一下领导……
编程小强 2015-08-31
  • 打赏
  • 举报
回复
引用 2 楼 windowsoahil 的回复:
好像真没什么不行的……上网找了一圈,没发现哪个规范说setter必须返回void,因为返回值不属于方法签名的一部分,这么做也不会引起反射方面的问题…… 不过这么一大堆属性,不考虑用内省机制去映射吗?手写略麻烦啊
规范中是没有,但是看很多人的代码都是返回void,eclipse自动生成的代码也是返回void,我觉得这种写法在对对象设置属性的时候真心不好用
解开者 2015-08-31
  • 打赏
  • 举报
回复
好像真没什么不行的……上网找了一圈,没发现哪个规范说setter必须返回void,因为返回值不属于方法签名的一部分,这么做也不会引起反射方面的问题…… 不过这么一大堆属性,不考虑用内省机制去映射吗?手写略麻烦啊
Cx_轩 2015-08-31
  • 打赏
  • 举报
回复
其实吧 我觉得 很多东西都是根据开发需要来进行稍加的改动。 你这种办法 我觉得很赞啊 哥们 学习到了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧