在Java中作为错误选择的getters setter示例

在Java中作为错误选择的getters setter示例,java,Java,有人能举一个例子说明不需要getter和setter吗 我还是不明白,我想一个有很多属性的非常大的类必须有它们,但在更简单的情况下?我的意思是,如果你有一些变量,你刚刚知道这些变量不需要以特定的方式访问,那么就不用麻烦使用getter/setter了。如果您有一个永远不会通过get修改的变量,请不要包含它。只使用完成任务所需的变量。我的意思是,如果您知道不需要以特定方式访问变量,那么就不用麻烦使用getter/setter。如果您有一个永远不会通过get修改的变量,请不要包含它。仅使用完成工作所

有人能举一个例子说明不需要getter和setter吗


我还是不明白,我想一个有很多属性的非常大的类必须有它们,但在更简单的情况下?

我的意思是,如果你有一些变量,你刚刚知道这些变量不需要以特定的方式访问,那么就不用麻烦使用getter/setter了。如果您有一个永远不会通过get修改的变量,请不要包含它。只使用完成任务所需的变量。

我的意思是,如果您知道不需要以特定方式访问变量,那么就不用麻烦使用getter/setter。如果您有一个永远不会通过get修改的变量,请不要包含它。仅使用完成工作所需的工具。

不需要getter/setter的示例?例如,servlet或者任何不是简单JavaBean的类怎么样?例如,如果您正在创建一个web应用程序,您可能会有一堆非常简单的JavaBean类,如“Customer”,它们确实有getter和setter(这些是您的“model”类,用于对业务域实体进行建模)--但是您会有更多的类,比如servlet和dao类,以及其他具有业务逻辑的服务,在这些服务中使用getter/setter是没有意义的。

一个不需要getter/setter的示例?例如,servlet或者任何不是简单JavaBean的类怎么样?例如,如果您正在创建一个web应用程序,您可能会有一堆非常简单的JavaBean类,如“Customer”,它们确实有getter和setter(这些是您的“model”类,用于对业务域实体进行建模)--但是,您将拥有更多的类,如servlet和dao类以及其他具有业务逻辑的服务,在这些服务中,使用getter/setter是没有意义的。

例如,如果它们只在内部访问,那么就不需要getter/setter。或者,如果你想打破一个编码禁忌,你可以把东西设置为公共的……尽管你不应该脱离传统和安全性。

例如,如果它们只在内部访问,那么你不应该需要getter/setter。或者,如果你想打破一个编码禁忌,你可以把东西公之于众……尽管你不应该脱离传统和安全。

想象你正在做一个棋盘游戏,它有一套棋子和棋盘。你不想让一个球员仅仅获得和定位球成为可能。这毫无意义,会破坏你的游戏。在这个例子中,你也不希望玩家能够设置棋子的位置,否则他们会做出非法的移动。您希望有一个移动方法,在获取和设置位置之前检查移动是否合法

另一个经典例子:银行账户。
你不想让人们只是获取和设置他们的余额,你想提供存款和取款方法,这些方法可以检查余额是否会变为负数,或者也可以记录交易。

想象你正在做一场象棋游戏,它有一套棋子和棋盘。你不想让一个球员仅仅获得和定位球成为可能。这毫无意义,会破坏你的游戏。在这个例子中,你也不希望玩家能够设置棋子的位置,否则他们会做出非法的移动。您希望有一个移动方法,在获取和设置位置之前检查移动是否合法

另一个经典例子:银行账户。
你不想让人们只获取和设置他们的余额,你想提供存款和取款方法,这些方法可以检查余额是否会变为负数,或者也可以记录交易。

getter和setter有许多相关用途:

  • 它们抽象了类的状态。一般来说,隐藏实现细节是一件好事
  • 它们使实现者更容易更改属性的表示类型
  • 它们使重写子类中的方面成为可能。(无法覆盖公开的属性。)
  • 它们允许类控制访问和更新。例如,setter可以阻止某些客户机代码将属性设置为“错误”值
  • 它们允许将类用作Javabean
所有这些都构成了一个令人信服的论点,可以在任何地方使用setter和getter

在我看来,只有两种情况下getter和setter是“可选的”:

  • 当属性仅由类本身使用时;i、 e.它们是私有的
  • 当属性属于轻量级私有内部类时;i、 定义一个类,该类的实例将永远存在,并且在外部类的封装边界内可见
在这些情况下,使用getter和setter的原因大多不适用。特别是,由于属性及其类型的可见性仅限于封闭类,因此更改它们的连锁反应仅限于定义该类的源代码文件


但是,如果存在内部类实现细节在代码修订版中泄漏的风险,则应立即添加getter和setter。

getter和setter有许多相关用途:

  • 它们抽象了类的状态。一般来说,隐藏实现细节是一件好事
  • 它们使实现者更容易更改属性的表示类型
  • 它们使重写子类中的方面成为可能。(无法覆盖公开的属性。)
  • 它们允许类控制访问和更新。例如,setter可以阻止某些客户机代码将属性设置为“错误”值
  • 它们允许将类用作Javabean
所有这些加起来就是一个问题
public int getMiles()
     and
public Date getLastOilChange() 
public boolean needsOilChange()