Questions tagged «setters»

7
为什么链式装订工非常规?
在bean上实现链接非常方便:无需重载构造函数,大型构造函数,工厂,并提高了可读性。我想不出任何弊端,除非您希望对象是不可变的,在这种情况下,它就不会有任何设置方法。那么,这不是OOP约定的原因吗? public class DTO { private String foo; private String bar; public String getFoo() { return foo; } public String getBar() { return bar; } public DTO setFoo(String foo) { this.foo = foo; return this; } public DTO setBar(String bar) { this.bar = bar; return this; } } //...// DTO …

8
我的顺序收集应该从索引0还是索引1开始?
我正在为具有多个通道的设备创建对象模型。客户和我之间使用的名词是Channel和ChannelSet。(“集合”在语义上不准确,因为它是有序的,而正确的集合不是。但这在不同的时间是个问题。) 我正在使用C#。这是一个用法示例ChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 一切都是花花公子。 但是,客户端不是程序员,它们绝对会被零索引混淆-第一个通道是它们的通道1。但是,为了与C#保持一致,我想将ChannelSet索引从零开始。 当我的开发团队和客户进行交互时,这肯定会导致他们之间的脱节。但更糟糕的是,在代码库中如何处理此问题的任何不一致都是潜在的问题。例如,这是一个UI屏幕,最终用户(根据1个索引进行思考)正在编辑频道13: 该Save按钮最终将产生一些代码。如果ChannelSet索引为1: channels.GetChannel(13).SomeProperty = newValue; // notice: 13 或如果它的索引为零: channels.GetChannel(12).SomeProperty = newValue; // notice: 12 我不确定如何处理。我觉得这是个好习惯,即使有序的,整数索引的事物列表(ChannelSet)与C#Universe中的所有其他数组和列表接口保持一致(通过零索引ChannelSet)。但是,然后,UI和后端之间的每一段代码都需要翻译(减1),我们都知道隐患和常见的一对一错误已经是多么的隐秘。 …

7
如果变量具有getter和setter,应该公开吗?
我有一个带有私有变量的类,该类具有该变量的getter和setter方法。为什么不将该变量公开? 我认为您唯一需要使用getter和setter的情况是,是否需要执行除set或get之外的其他操作。例: void my_class::set_variable(int x){ /* Some operation like updating a log */ this->variable = x; }

3
使用专用设置器存根属性以进行测试
我们有对象 public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public string Property9 {get;private …

4
重命名方法可以保留封装吗?
我正在阅读此页面,了解何时需要使用getter / setter,并且OP提供了以下代码示例: class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } void go_shopping(Fridge fridge) { fridge.set_cheese(fridge.get_cheese() + 5); } 该接受的答案状态: 顺便说一句,在你的榜样,我会给类Fridge的 putCheese()和takeCheese()方法,而不是get_cheese() 和set_cheese()。这样您将仍然具有封装。 如何封装从对get / set重命名它来保存putCheese()/ takeCheese()你显然获取/设置一个值,那么为什么不干脆把它作为对get / set? 在相同的答案中,它还指出: 拥有getter和setter方法本身并不会破坏封装。破坏封装的方法是自动为每个数据成员(Java术语中的每个字段)添加一个getter和setter,而无需考虑任何问题。 在这种情况下,我们只有一个变量,cheese并且您可能想将奶酪拿回冰箱,所以在这种情况下,一对get / set是合理的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.