从不是getter / setter方法的对象方法中访问对象属性的“正确”方法是什么?
答案 0 :(得分:1)
Getter / Setter是访问对象属性的推荐方法。否则,您必须使用public
属性,但不建议使用public
属性。
答案 1 :(得分:1)
如果某个类的属性没有getter且它们不可见(例如,不是public
),则表示该类的设计使您无法访问它们。在这种情况下,没有正确的方法来访问它们。
如果您正在设计类,并且您希望其他类可以访问其属性,那么您应该应该来提供getter。您也可以将属性声明为public
,protected
或包私有,但这会使您的抽象漏洞并产生许多不良后果。
如果你问对象的一个方法应该如何访问它自己的属性,那么简单的答案就是最方便的方法。如果班级有吸气剂,你可以打电话给他们。或者,您可以直接访问属性。泄漏抽象的问题在这种情况下不适用,因为访问状态的方法是在抽象边界内。
答案 2 :(得分:0)
这主要是一个偏好问题。
我个人不喜欢在我的对象中使用getter和setter。这增加了可读性,允许我更改我的getter和设置以返回副本(主要是列表)而不更改我自己的对象。如果你在getter中做了一些特殊的事情,那么你可以制作一个getter方法,让你的getter和其他函数都使用它。如果您的类变得太大(这样就不要创建大类),这将会出错。我不喜欢使用getter setter隐藏对象内部的副作用(与外部用户不同,它们应该隐藏在对象内的任何副作用),当你想要有副作用时,给私有方法一个清楚的名字表明它有它们。
答案 3 :(得分:0)
首先我会回答这个问题:
从不是getter / setter方法的对象方法中访问对象属性的“正确”方法是什么?
当您在对象中时,可以直接引用该方法属于对象的属性。例如:
public class testClass() {
public int x;
private someMethod() {
x = 4;
}
}
回答评论:
我认为可以重新提出这个问题:在实现我的对象方法时,我应该使用getter和setter吗?或者我应该直接访问成员变量吗?
您应该始终尽可能地隐藏类中的内部数据和其他实现细节;从实现中分离API(a.k.a encapsulation )。封装将模块分离,从而允许它们单独开发,测试和修改。
通常,您应该使用最低access modifier
可能(例如private,protected,package-private),同时保持您正在编写的应用程序的功能。设计和开发这种方式的好处是,您可以在不破坏使用模块的代码的情况下更改实现细节。如果您将所有内容公开,并且其他人正在使用您的类,那么您将被迫永远支持它以保持兼容性 - 或者直到他们更改使用您的模块的实现。
实例字段永远不应公开,因为您放弃了限制可以存储在字段中的值的功能,如果它是一个可变对象,则会打开您的对象以防滥用(请参阅here) 。值得注意的是,具有公共可变字段的类不是线程安全的。同样重要的是要注意,声明为public static final
但是可变对象的实例字段也可以修改,并且可以是安全风险。
基本上,在公共类中 - 始终使用访问器方法,而不是公共字段。它允许您保护可变对象免受类外的修改(无论是有意还是无意),并允许您在以后更改实现细节而不会伤害您的客户。