gpt4 book ai didi

java - Java中如何设置对象的实例变量?

转载 作者:行者123 更新时间:2023-12-01 13:11:38 24 4
gpt4 key购买 nike

这个问题与具体问题无关,而是一个普遍问题。在Java中,创建类时,实际上有两种选择如何启用对该类的实例变量的访问:

  1. 通过创建构造函数,构造函数将拥有一个参数列表,用于设置实例变量的值。

  2. 通过向类添加 setter(和 getter)方法来设置实例变量。

所以现在我想知道:哪个选项实际上更好?我还读到,在创建对象时不设置实例变量并不是一个好方法,建议为它们设置一些值。真的吗?在这种情况下,我会认为第一个选项更好。

最佳答案

除非在构造后迫切需要更改值,否则我强烈建议在构造函数中设置字段。原因是只有在构造函数中设置的字段才能成为 immutable ,而不变性是一件非常好的事情,因为它使得类不可能通过反射或任何其他方式被改变。

最终字段的示例:

public class MyClass  {
private final int id;
public MyClass(int id) {
this.id = id;
}

当 setter 中的字段可更改时,锁定类的唯一方法是进行诸如以下的检查

public void setID(int id)  {
if(id != -1) {
throw new IllegalStateException("Already set!");
}
this.id = id;
}

或者通过某种方式将对象作为一个整体锁定:

public void lock()  {
if(getID() == -1) {
throw new IllegalStateException("Must first setID(i).");
}
isLocked = true;
}
public void setID(int id) {
if(isLocked()) {
throw new IllegalStateException("isLocked() is true.");
}
this.id = id;
}

显而易见,在构造函数中设置字段要简单得多。

关于java - Java中如何设置对象的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22812104/

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