1
68
我觉得没有什么特别的问题,只是风格问题。它在以下情况下很有用:
此方法的替代方法可能是:
如果你一次只设置几个属性,我会说不值得返回“this”。如果您稍后决定返回其他内容(如状态/成功指示器/消息),则肯定会失败。 |
2
95
这不是坏习惯。这是一种越来越普遍的做法。如果不想,大多数语言不需要处理返回的对象,因此它不会更改“正常”setter用法语法,但允许将setter链接在一起。 这通常称为构建器模式或 fluent interface . 在Java API中也是常见的:
|
3
76
总结一下:
还有几点没有提到:
|
4
75
我更喜欢使用“with”方法:
因此:
|
5
24
如果你不想回来
作为旁白,我认为它在c:
|
6
9
它不仅打破了GETS/SETTER的约定,也打破了Java 8方法参考框架。
|
7
7
我不知道Java,但我已经用C++完成了。 其他人说这会让台词很长很难读, 但我已经这样做过很多次了:
这样更好:
至少,我想。但如果你愿意的话,欢迎你投我一票,叫我一个糟糕的程序员。我不知道你是否可以用Java做这个。 |
8
6
因为它不返回void,所以它不再是有效的javabean属性设置器。如果您是世界上七个使用可视化“bean builder”工具的人之一,或者是17个使用jsp bean setproperty元素的人之一,这可能很重要。 |
9
5
这种被称为“流畅界面”的方案(双关语)现在变得相当流行。这是可以接受的,但这不是我真正喜欢的。 |
10
5
至少 理论上 ,它可以通过设置调用之间的错误依赖关系来破坏jvm的优化机制。 它应该是语法糖,但实际上可以在超级智能Java 43的虚拟机中产生副作用。 这就是为什么我投反对票,不要用它。 |
11
5
这一点也不坏。但它与 JavaBeans Spec . 有很多规范依赖于那些标准访问器。 你总是可以让他们彼此共存。
现在我们可以一起使用了。
这是不可变对象的另一个版本。
现在我们可以这样做了。
|
12
3
我赞成二传手有“这个”的回报。我不在乎它是否符合豆子标准。对我来说,如果可以使用“=”表达式/语句,那么返回值的setter就可以了。 |
13
3
Paulo Abrantes 提供了另一种使javabean setters流畅的方法:为每个javabean定义一个内部生成器类。如果您使用的工具被返回值的setter弄糊涂了,paulo的模式可能会有帮助。 |
14
2
我过去喜欢这种方法,但我已决定反对。 原因:
我看到的构建器模式没有使用setfoo(foo).setbar(bar)约定,而是使用更多foo(foo).bar(bar)。也许正是因为这些原因。 这是一个品味问题。我只是喜欢“最不意外”的方法。 |
15
2
这种特殊的模式称为方法链。 Wikipedia link ,这有更多的解释和例子说明了它是如何在各种编程语言中完成的。 附言:我想把它留在这里,因为我在找具体的名字。 |
16
2
如果你在整个应用程序中使用相同的约定,这看起来很好。 另一方面,如果应用程序的现有部分使用标准约定,我会坚持使用它,并将构建器添加到更复杂的类中
|
17
1
一见钟情:“可怕!”. 进一步思考
实际上比
真有趣。正在将想法添加到工具包… |
18
1
是的,我认为这是个好主意。 如果我能补充一下,这个问题呢:
这将起作用:
这将不会被eclipse接受!:
这是因为setname()返回的是一个人,而不是一个朋友,并且没有peoplesetnickname。 我们如何编写setter来返回self类而不是类的名称? 如果self关键字存在的话,这样就可以了。这是真的吗?
|
19
1
一般来说,这是一个很好的实践,但是您可能需要set type函数使用布尔类型来确定操作是否成功完成,这也是一种方法。一般来说,没有教条说这是好还是床,当然是来自于形势。 |
20
0
从声明中
我看到两件事 1)无意义的陈述。 2)缺乏可读性。 |
21
0
这可能不太可读
或者这个
这比:
|
22
0
我已经做了很长一段时间的setter,唯一真正的问题是使用严格的getpropertydescriptors获取bean读写器bean访问器的库。在这些情况下,您的Java“bean”将不具有您所期望的写入器。 例如,我还没有对它进行过测试,但我不会惊讶于当杰克逊从JSON/MAP创建Java对象时,不会识别这些设置器。我希望我在这一点上错了(我很快就会测试)。 事实上,我正在开发一个轻量级的以sql为中心的orm,我必须添加一些getpropertydescriptors之外的代码到返回这个的公认setter中。 |
23
0
很久以前的回答,但是我的两分钱…很好。我希望这个流畅的界面能经常使用。 重复“factory”变量不会在下面添加更多信息:
这更干净,伊姆霍:
当然,作为已经提到的答案之一,Java API必须在某些情况下进行调整,例如继承和工具。 |
24
0
如果可以,最好使用其他语言结构。例如,在Kotlin中,您可以使用 具有 , 应用 或 让 . 如果用这种方法,你不会真的 需要 从setter返回实例。 这种方法允许您的客户机代码:
这里有一些例子。
|
25
0
如果我正在编写一个api,我使用“return this”来设置只设置一次的值。如果我有任何其他用户可以更改的值,我将使用标准void setter。 不过,这确实是一个偏好的问题,在我看来,链式二传手确实很酷。 |
26
0
我同意所有声称这违反了javabeans规范的海报。有理由保留这一点,但我也觉得使用这个构建器模式(被暗指)是有它的位置的;只要它不是在所有地方都使用,就应该是可以接受的。”对我来说,它的终点是对“build()”方法的调用。 当然,还有其他方法可以设置所有这些内容,但这里的优点是,它避免了1)许多参数公共构造函数和2)部分指定的对象。在这里,您让构建器收集所需的内容,然后在最后调用其“build()”,这样可以确保不构造部分指定的对象,因为该操作的可视性可能低于公共可视性。另一种选择是“参数对象”,但imho只是将问题推后一级。 我不喜欢许多参数构造函数,因为它们使许多相同类型的参数更有可能被传入,这使得将错误的参数传递给参数变得更容易。我不喜欢使用很多setter,因为对象可以在完全配置之前使用。此外,使用“build()”方法可以更好地实现基于先前选择的默认值的概念。 简而言之,如果使用得当,我认为这是一个好的做法。 |
27
-4
坏习惯: 设置器 吸气器 那么显式声明一个方法呢,它是为你做的
|
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
cobby · 在战略模式中使用工厂模式? 2 年前 |
Nobody · Java中带while循环的三角形模式 2 年前 |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
D. Schreier sanjeev · 对于目录中的每个类 6 年前 |
Tanvi Jaywant · 如何重载类 6 年前 |