java - Java 中的访问器方法

标签 java methods accessor

所以我有一个关于“setter”和“getter”方法的问题,以及它们是否有用。

假设我只是编写了一个非常基本的程序,如下所示:

    public class Account
    {
     String name;
     String address;
     double balance; 
    }

然后,假设我编写了另一个使用这个“Account”类的类,如下所示:

    class UseAccount
    {
        public static void main(String[] args)
        {
            Account myAccount = new Account();
            Account yourAccount = new Account();

            myAccount.name = "Blah blah"
        }        
    }

等等等等

当我编写 myAccount.name = "Blah blah" 时,我正在更改“Account”类中变量“name”的值。我可以自由地按照我喜欢的方式编写代码多次执行此操作。然而,我注意到,更好的做法是将“Account”类中的变量设为私有(private),然后使用“setter”和“getter”方法。所以如果我写以下内容:

    public class Account
    {
       private String name;
       private String address;
       private String balance;

       public void setName(String n)
       {
          name = n;
       }

       public String getName()
       {
          return name;
       }
    }

我仍然可以通过创建另一个具有类似内容的类来更改变量“name”的值:

    class UseAccount
    {
       public static void main(String[] args)
       {
          Account myAccount = new Account();

          myAccount.setName("Blah blah");
       }
    }

我不明白使用此方法有何不同或应该防止人们改变私有(private)字段的值。有帮助吗?

最佳答案

普通访问器方法除了样式没有区别,但是你也可以用它们执行代码,例如:

public void setName(String name) {
    if (name == null) {
        throw new IllegalArgumentException("Name may not be null");
    }
    this.name = name;
}

您还可以从 getter 返回副本,从而保护您的数据:

private List<String> middleNames;
public List<String> getMiddleNames() {
    return new ArrayList<String>(middleNames); // return a copy
    // The caller can modify the returned list without affecting your data
}

这只是两个简单的示例,但是关于如何使用访问器方法的示例不计其数。

最好遵循一致的风格,这就是为什么我们总是使用 getters/setters - 这样的代码可以在需要时执行。

关于java - Java 中的访问器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498287/

相关文章:

java - JVM方案抽象语法树访问

java - 是否有映射库可以启动检查正确的 bean 映射?

java - 将数组和变量传递给方法并返回较小的数组

java - 访问器方法和 Java 反射

java - 解析 POST 查询中收到的字符串参数

iphone - 将按钮的目标和选择器设置为多种方法

ruby - 将方法传递给迭代器方法时发生了什么

java - 我写了 Accessors 和 Mutators 方法,但我仍然无法访问私有(private)变量!为什么?

java - 对对象数组使用 Arrays.binarySearch 并在对象中查找字符串