在Java中作为错误选择的getters setter示例
有人能举一个例子说明不需要getter和setter吗在Java中作为错误选择的getters setter示例,java,Java,有人能举一个例子说明不需要getter和setter吗 我还是不明白,我想一个有很多属性的非常大的类必须有它们,但在更简单的情况下?我的意思是,如果你有一些变量,你刚刚知道这些变量不需要以特定的方式访问,那么就不用麻烦使用getter/setter了。如果您有一个永远不会通过get修改的变量,请不要包含它。只使用完成任务所需的变量。我的意思是,如果您知道不需要以特定方式访问变量,那么就不用麻烦使用getter/setter。如果您有一个永远不会通过get修改的变量,请不要包含它。仅使用完成工作所
我还是不明白,我想一个有很多属性的非常大的类必须有它们,但在更简单的情况下?我的意思是,如果你有一些变量,你刚刚知道这些变量不需要以特定的方式访问,那么就不用麻烦使用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
- 当属性仅由类本身使用时;i、 e.它们是私有的李>
- 当属性属于轻量级私有内部类时;i、 定义一个类,该类的实例将永远存在,并且在外部类的封装边界内可见李>
但是,如果存在内部类实现细节在代码修订版中泄漏的风险,则应立即添加getter和setter。getter和setter有许多相关用途:
- 它们抽象了类的状态。一般来说,隐藏实现细节是一件好事
- 它们使实现者更容易更改属性的表示类型
- 它们使重写子类中的方面成为可能。(无法覆盖公开的属性。)
- 它们允许类控制访问和更新。例如,setter可以阻止某些客户机代码将属性设置为“错误”值
- 它们允许将类用作Javabean
public int getMiles()
and
public Date getLastOilChange()
public boolean needsOilChange()