我如何访问对象属性对象方法?

时间:2011-11-11 09:08:35

标签: java

从不是getter / setter方法的对象方法中访问对象属性的“正确”方法是什么?

4 个答案:

答案 0 :(得分:1)

Getter / Setter是访问对象属性的推荐方法。否则,您必须使用public属性,但不建议使用public属性。

答案 1 :(得分:1)

如果某个类的属性没有getter且它们不可见(例如,不是public),则表示该类的设计使您无法访问它们。在这种情况下,没有正确的方法来访问它们。

如果您正在设计类,并且您希望其他类可以访问其属性,那么您应该应该来提供getter。您也可以将属性声明为publicprotected或包私有,但这会使您的抽象漏洞并产生许多不良后果。


如果你问对象的一个​​方法应该如何访问它自己的属性,那么简单的答案就是最方便的方法。如果班级有吸气剂,你可以打电话给他们。或者,您可以直接访问属性。泄漏抽象的问题在这种情况下不适用,因为访问状态的方法是抽象边界内。

答案 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但是可变对象的实例字段也可以修改,并且可以是安全风险

基本上,在公共类中 - 始终使用访问器方法,而不是公共字段。它允许您保护可变对象免受类外的修改(无论是有意还是无意),并允许您在以后更改实现细节而不会伤害您的客户。