Java 中的设置和获取方法?

新手上路,请多包涵

如何使用 set 和 get 方法,为什么要使用它们?他们真的有用吗?你能给我一些设置和获取方法的例子吗?

原文由 user759630 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 357
2 个回答

Set 和 Get 方法是一种数据封装模式。您不是直接访问类成员变量,而是定义 get 方法来访问这些变量,以及 set 方法来修改它们。通过以这种方式封装它们,您可以控制公共接口,以防您将来需要更改类的内部工作方式。

例如,对于一个成员变量:

 Integer x;

你可能有方法:

 Integer getX(){ return x; }
void setX(Integer x){ this.x = x; }


chiccodoro 还提到了很重要的一点。如果您只想允许对任何外部类的字段进行读取访问,您可以通过仅提供公共 get 方法并保持 set 私有或不提供 set 完全没有。

原文由 Justin Ethier 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想添加其他答案,setter 可用于防止将对象置于无效状态。

例如,假设我必须设置一个建模为字符串的 TaxId。第一个版本的 setter 可以是这样的:

 private String taxId;

public void setTaxId(String taxId) {
    this.taxId = taxId;
}

但是,我们最好防止使用无效的 taxId 设置对象,因此我们可以引入检查:

 private String taxId;

public void setTaxId(String taxId) throws IllegalArgumentException {
    if (isTaxIdValid(taxId)) {
        throw new IllegalArgumentException("Tax Id '" + taxId + "' is invalid");
    }
    this.taxId = taxId;
}

下一步,为了改进程序的模块化,将 TaxId 本身作为一个对象,能够检查自己。

 private final TaxId taxId = new TaxId()

public void setTaxId(String taxIdString) throws IllegalArgumentException {
    taxId.set(taxIdString); //will throw exception if not valid
}

同样对于 getter,如果我们还没有值怎么办?也许我们想要一条不同的道路,我们可以说:

 public String getTaxId() throws IllegalStateException {
    return taxId.get(); //will throw exception if not set
}

原文由 stivlo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题