9

可能重复:
为什么要使用 getter 和 setter?

这是一个新手问题。是否非常有必要使用 getmethods 来访问属性值?一旦分配了值,就可以获取值目录。例如,在下面的代码中,displayName()可以在没有任何 getter 方法的帮助下显示 firstName 值。或者它是一个标准的编码标准,一个人必须有 getter 和 setter 方法或任何其他提供该值的方法?

class Test{

    private String firstName;

    public void setName(String fname){
        firstName = fname;
    }

    public void displayName() {
        System.out.println("Your name is " + firstName);
    }
}          
4

6 回答 6

12

告诉,不问是面向对象设计中的一个重要原则。一般来说,你应该告诉对象做事而不是问他们问题。每个地方的 getter/setter 都不鼓励这种做法,因为鼓励您进入对象内部并到达字段(或者更糟糕的是,在 setter 的情况下伸入并戳东西)。这会破坏封装并使您的代码更难推理。

在您的特定情况下,我将创建一个名为的对象,该对象Name具有一个构造函数,该构造函数采用名称和单个方法来显示它。

于 2012-08-09T12:32:17.827 回答
4

在您的情况下(显示显示名称),不需要提供 Getter。

但是如果您想在另一个类中使用该字段,我们需要提供 Getter 方法。

于 2012-08-09T12:32:06.767 回答
3

Getter 和 setter 是 Java Bean 标准接口的一部分,许多框架(如 Hibernate)都希望它们到位。话虽这么说,当然由您决定是否需要它们以及何时需要它们以及用于什么目的。它们提供对您的私有成员变量的访问,它们甚至可以让您有机会做更多的事情,而不仅仅是简单的 get 和 set。

OO软件的重点是重用。这意味着其他程序员,或者多年后的你,可以将代码用于其他系统。

当您拥有私有成员变量并使用 get/set 函数时,您可以更改函数的内部实现,而不会破坏使用它的所有其他代码。

于 2012-08-09T12:33:03.897 回答
2

请务必使用 Getter 和 Setter 来访问您的属性!

你应该看看这篇文章...

于 2012-08-09T12:31:01.457 回答
2

拥有私有状态,封装是好的,在很多情况下这是正确的。假设您的类是线程安全的,具有您无法确保的公共字段。

另一方面,在某些情况下这是无用的!假设你只在一个包中访问你的对象,你确定你永远不会导出它,那为什么还要麻烦呢?

于 2012-08-09T12:33:49.800 回答
2

我没有任何链接来支持这一点,但这就是我所做的。

如果公共字段不是静态的,我会尽量避免它们。所以我只使用受保护和私有字段。在课堂上,您无需获取/设置即可访问它们,这完全没问题。在课堂之外,总是尝试使用 get/set。

所以你的示例代码对我来说完全没问题。:)

编辑:对我来说,一个例外是如果我创建一个像这样的struct容器类

class Point4D {
  public int x1, x2, x3, x4;
}

然后我认为公共领域是可以的。不过,最好将它们设为私有并命名吸气public int x1()剂等。一旦向该容器引入了一些更改实例状态的方法(例如更改 x1/x2/x3/x4 的值),我将它们设为私有并添加 get/set。

于 2012-08-09T12:39:24.043 回答