getter方法的必要性

时间:2012-08-09 12:28:00

标签: java

  

可能重复:
  Why use getters and setters?

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

class Test{

    private String firstName;

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

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

6 个答案:

答案 0 :(得分:12)

Tell, Don't Ask是面向对象设计中的一个重要原则。一般来说,你应该告诉对象做事而不是问他们问题。每个地方都会阻止这种做法,因为你会被鼓励进入一个物体并到达田野(或者更糟糕的是伸手可及的东西,并且在制定者的情况下捅东西)。这打破了封装,使您的代码更难以推理。

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

答案 1 :(得分:4)

在你的情况下(显示显示名称)没有必要提供Getter。但是如果你想在另一个类中使用该字段我们需要提供Getter方法。

答案 2 :(得分:3)

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

OO软件的重点在于重用。这意味着其他程序员,或者您从现在起几年后,可以将代码用于其他系统。

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

答案 3 :(得分:2)

请务必使用Getter和Setter访问您的媒体资源!

你应该看看this article...

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

我没有任何支持这个的链接,但这就是我的工作。

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

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

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

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

然后我认为公共领域还可以。尽管如此,将它们设为私有并将其命名为getter public int x1()等仍然会更好。一旦为此容器引入了一些更改实例的 state 的方法(比如更改x1 / x2 / x3 / x4的值),我就将它们设为私有并添加get / set。< / p>