在java中设置和获取方法?

2022-08-31 21:27:28

如何使用集合和获取方法,为什么要使用它们?他们真的有帮助吗?另外,你能给我一些集合和获取方法的例子吗?


答案 1

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

例如,对于成员变量:

Integer x;

您可能有以下方法:

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

chiccodoro还提到了一个重要的观点。如果只想允许任何外来类对字段进行读取访问,则可以通过仅提供公共方法并保持私有或根本不提供 方法来执行此操作。getsetset


答案 2

我想在其他答案中添加一些答案,即可以使用 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
}

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

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