java - set 和 get 方法与公共(public)变量的优势

标签 java class methods private public

Possible Duplicate:
Why use getters and setters?

在你的类中创建访问私有(private)变量的方法而不是公开变量有什么好处吗?

例如第二种情况比第一种好吗?

//Case 1
public class Shoe{
    public int size;
}

//Case 2
public class Shoe{
    private int size;
    public int getSize(){
        return size;
    }

    public void setSize(int sz){
        size = sz;
    }

}

最佳答案

我有一天在 SO 上看到的,作为答案(由 @ChssPly76 编写)为什么要使用 getter 和 setter

Because 2 weeks (months, years) from now when you realize that your setter needs to do more than just set the value, you'll also realize that the property has been used directly in 238 other classes :-)

还有更多优势:

  1. getter 和 setter 可以在其中进行验证,字段不能
  2. 使用 getter,您可以获取所需类的子类
  3. getter 和 setter 是多态的,字段不是
  4. 调试可以简单得多,因为断点可以放在一个方法中,而不是靠近该给定字段的许多引用。
  5. 他们可以隐藏实现更改:

之前:

private boolean alive = true;

public boolean isAlive() { return alive; }
public void setAlive(boolean alive) { this.alive = alive; }

之后:

private int hp; // change!

public boolean isAlive() { return hp > 0; } // old signature 
 //method looks the same, no change in client code
public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }

编辑:使用 Eclipse 时的另一个新优势 - 您可以在字段上创建观察点,但如果您有 setter ,您只需要一个断点,并且... 断点(例如在 setter 方法中)可以是有条件的,观察点(在现场)不能。因此,如果您只想在 x=10 时停止调试器,则只能在 setter 中使用断点。

关于java - set 和 get 方法与公共(public)变量的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071407/

相关文章:

java - 在jpa实体中使用json字段(实现hibernate UserType)

java - 无法在 Java 中关闭框架?

java - 使用不带数组的 toString 方法?

java - 将方法实现作为参数发送

java - java中公共(public)静态最终类标识符的命名规则是什么?

oop - 在实体被认为臃肿之前,我们可以合理地将多少方法放入实体中?

java - 什么相当于 Android/Java 中的 JavaScript setInterval/setTimeout?

java - 是否存在依赖 Artifact 的 Maven "compiler-only"范围

c++ - 指向成员函数的函数指针

c++如何按类类型对 vector 进行排序