gpt4 book ai didi

java - Java 中的访问器方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:05:15 24 4
gpt4 key购买 nike

所以我有一个关于“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com