如何使用 set 和 get 方法,为什么要使用它们?他们真的有用吗?你能给我一些设置和获取方法的例子吗?
原文由 user759630 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何使用 set 和 get 方法,为什么要使用它们?他们真的有用吗?你能给我一些设置和获取方法的例子吗?
原文由 user759630 发布,翻译遵循 CC BY-SA 4.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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Set 和 Get 方法是一种数据封装模式。您不是直接访问类成员变量,而是定义
get
方法来访问这些变量,以及set
方法来修改它们。通过以这种方式封装它们,您可以控制公共接口,以防您将来需要更改类的内部工作方式。例如,对于一个成员变量:
你可能有方法:
chiccodoro 还提到了很重要的一点。如果您只想允许对任何外部类的字段进行读取访问,您可以通过仅提供公共
get
方法并保持set
私有或不提供set
完全没有。