java - 在类中使用私有(private)变量或公共(public)方法哪个更好?

标签 java class methods setter

例子:

private int x = 4;

public TestClass(int x) {
    this.x = x;
}

public TestClass(int x) {
    setX(x);
}

public void setX(int x) {
    this.x = x;
}

第一个构造函数更好还是第二个?我问这个是因为当我将我的类封装在 IntelliJ IDEA 中时,如果我之前使用过 this.x = x ,它会将其更改为 setX(int newX) ;

最佳答案

在大多数情况下,这都是个人喜好。如果它的值不依赖于其他变量,我会使用第一个构造函数。但是,setter 方法允许在修改变量值之前满足某些条件。例如:

private int x;

public TestClass(int x) {
    setX(x);
}

public void setX(int x) {
    // Some random condition depending on other variables.
    if (System.currentTimeMillis() & 1 == 0) {
        this.x = 5;
    } else {
        this.x = x;
    }
}

如果有许多条件无法用三元语句轻松表示,则使用 setter 方法是有意义的。

如果类是抽象的,那么扩展它的具体类可能会覆盖 setter 方法,从而修改变量的值。如果您计划使用自封装并且不希望任何子类覆盖 setter 方法,只需将 final 关键字添加到方法声明中即可。

关于java - 在类中使用私有(private)变量或公共(public)方法哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668456/

相关文章:

尝试创建标记 vector 时出现 C++ 错误

java - 不同级别的跑法难度

java - 将字符串中的每个单词或数字组合加倍

java - Eclipse至Android Studio-Gradle问题

java - 为什么不能在变量声明行中放置调试断点?

java - 第一次请求的 servlet 响应时间很慢

r - 更新引用类方法

C - 如何在方法中对数组进行排序和打印,但不影响先前未排序的数组

java - 我怎样才能在我的程序中用单词输出百位和十位数字

java - 随机弹跳球