【问题标题】:Setter and Getter conventionsSetter 和 Getter 约定
【发布时间】:2013-03-03 00:23:13
【问题描述】:
public class Score {

    private String score;


    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }

}

在一个项目中,我发现了这段代码

这段代码的功能很简单,但是我不明白为什么如果设置器是公共的,为什么要将字符串分数设为私有。对我来说,这看起来像是公共设置者打破了将分数设为私有的感觉。

提前感谢您帮助我从新手发展为至少有点程序员。

【问题讨论】:

  • 在 OO 编程中区分公共和私有的全部意义在于,您可以将类的 what 与它的 how 分开。 Setter 和 getter 是抽象的,变量是具体的。

标签: private setter public conventions getter


【解决方案1】:

使用 Getter 和 setter,因为如果您在项目进行到一半时决定更改变量的工作方式,或者如果您想修改原始值,则必须检查您的代码并更改所有调用该公共变量。

但是,使用 getter 和 setter,您可以更改在方法内处理变量的方式。

【讨论】:

    【解决方案2】:
    1. private关键字表示声明为这样的属性或方法 仅在您的班级内可见。

    2. public关键字表示这样声明的属性或方法对任何人都是可见的。

    这种做法被称为信息封装。公共 setter 和 getter 允许程序员控制这些函数的用户可以对您的私有属性执行什么操作。

    【讨论】:

      【解决方案3】:

      乍一看,它确实看起来像是损坏的封装。但是,以上有两个优点。

      1. 实施。实现不一定必须是String 变量。 setter 实现可以将其写入数据库,然后 getter 检索它。
      2. 验证。仅公开该字段意味着您可以将String 设置为您想要的任何内容。通过引入 setter 方法,您可以检查(例如)长度、空值、内容等。

      上面的意思是你可以按照你想要的方式和以不同于接口的方式实现类(想象一下 - 你可以将这些方法抽象成一个接口并提供 多个 实现,所有这些实现都以不同的方式运行)。因为它们遵循相同的接口,您可以用一种实现替换另一种实现,而无需更改周围的代码。

      我会说(进一步说)我倾向于不喜欢上述模式。我的理由是,OO 的优势在于您可以告诉对象代表您做事,不是,这样您就可以自己提取字段并使用它们执行自己的逻辑。因此,我倾向于怀疑由字段和 setter/getter 组成的类。

      【讨论】:

      • 谢谢你的回答,这个对我帮助最大。我仍然不能推荐,因为我的声誉仍然很低:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 2011-04-06
      • 2013-08-05
      • 2011-02-26
      • 2020-05-15
      相关资源
      最近更新 更多