我有一个对象,其中构造函数的工作是设置字段,并且在此之后它们不会被设置或更改。不过,我需要一个吸气剂。然后,我是否需要设置setter,即使我不会使用它们“以防万一”,或者我可以删除它们并仅在将值留给构造函数时留下getters?即使我只需要其中一个,我是否应该设置getter和setter?
回答
根据java bean规范,省略getter或setter 方法是合法的。所以,如果你从不使用它们,你可以放心地忽略二传手。
非常感谢。我只是不想执行一些OOP错误;) – Straightfw
这个问题与java bean规范有什么关系? – assylias
@assylias不是java bean spec的setters和getters部分吗? – PermGenError
如果您想将对象属性设置为只读并在对象的构造函数中初始化它,则不需要setter。如果你想在这个类之外访问这个属性,那么你需要getter。
同时建议您阅读本SO Question
是从一个建筑师在谷歌:
class Foo{
private int a;
private int b;
public Foo(int num1, int num2){
a= num1;
b= num2;
}
public int getA(){
return a;
}
public int getB(){
return b;
}
}
这里你不需要制定者,一旦你建立你的对象。你不能改变它的状态。
最好也使'a'和'b'字段最终。 – bowmore
是的,你可以做到这一点。 – DarthVader
在某些情况下,只有你会看到它是所有人的选择,因为大多数编辑者可以自动为你添加它们。
如果它是永远不会改变的事情,如果它发生坏事情,那么它不应该有一个setter,应该是一个私有变量。
如果你正在写一些东西来重新使用和分享给别人,那么你确实希望getter和setter在任何地方都可以这样做,因为你不知道其他人可能需要做什么来处理API。
如果你的构造函数设置了字段,并且你不需要改变它们,它们听起来像是不可变的。
我会让他们最后,然后只有getters。
如果你忽略了最后的那么你允许某人在将来添加setter。如果你不需要setter,那么你应该强制这个作为你的设计的一部分,并与final字段gettets。
这将使任何阅读代码的人都明白,他们是不可改变的设计。
还有比我们需要编写更多代码的问题。如果你写setter,那么你可以引入错误,因为这个代码可能没有完全测试,因为你不认为它需要
我认为这取决于你的构造函数在做什么。如果你的构造函数只是做原始的变量设置,那么我认为你不需要为它们包含setter。然而,如果你的构造函数代码在设置一个变量的值之前做了任何类型的业务逻辑,那么我认为这至少可以为所讨论的变量(如果不是全部的话)创建一个setter。
例如,如果你的构造函数代码这样做,那么不包括任何setter方法:
public MyClass(String varA, String varB, int varC)
{
this.varA = varA;
this.varB = varB;
this.varC = varC;
}
但是如果你的代码做这个,你应该包括一个setter解耦的逻辑,使之清洁:
public MyClass(String varA, String varB, int varC)
{
if (varA == null)
{
this.varA = '(empty)';
}
else
{
this.varA = varA;
}
this.varB = varB;
if (varC < 0)
{
callSomeMethod();
}
this.varC = varC;
}
这种逻辑保证创建setter。
- 1. 我是否需要创建一百个getter和setter?
- 2. 我应该还是不应该使用getter和setter方法?
- 3. 为什么我需要使用setter(而不是getter)来设置数据?
- 4. vala需要setter/getter
- 5. 我不应该在getter和setter中使用变量变量吗?
- 6. 我应该在类实现中使用getter和setter吗?
- 7. 当属性getter/setter需要LinkDemand时,我该如何安抚FxCop?
- 8. @ManagedProperty - 设置getter和setter
- 9. 设置getter和setter方法
- 10. 应该同时使用getter和setter吗?
- 11. 是否需要测试getter和setter方法?
- 12. c#如果我只需要一个表,我应该使用DataSet还是DataTable?
- 13. Autoscaling EMR-是否需要?我应该只使用EC2吗?我应该只使用Qubole吗?
- 14. 如果我只需要1个物业(目前),我是否需要一个类?
- 15. 我是否需要设置约束?
- 16. 我是否需要getter和setter,如果我依赖于objective-c中的垃圾回收
- 17. getter和setter应该允许什么?
- 18. 我应该在哪一页上只需要一个JavaScript例程?
- 19. 我应该在getter/setter中使用private关键字还是public关键字?
- 20. 我需要的是ActiveRecord和ActiveMailer,我应该使用Rails/Merb吗?
- 21. 的Java练习....需要帮助,而无需使用getter和setter
- 22. 即使我只关心它的流,我是否还需要存储TcpClient?
- 23. 如果我不需要,我是否应该多次调用一个方法?
- 24. C#是否在必要的getter和setter中锁定?
- 25. 我只需要一个WSDL,我也需要一个XSD?
- 26. PhpStorm - 设置getter和setter方法
- 27. 如果我只是需要一个webview,PhoneGap是否太多?
- 28. 网点是否有getter/setter?
- 29. 使用getter和setter
- 30. 使用getter和setter
不要编写不需要的代码。为什么你会呢?这只是浪费时间和更多潜在的错误。 – Mat
我明白了。谢谢你,并为这个愚蠢的问题感到抱歉:) – Straightfw
能够忽略二传手是非常重要的。您正在限制某些操作(即写入)。这是封装。 – Gigi