gpt4 book ai didi

Java - 在没有方法的情况下编辑实例变量

转载 作者:行者123 更新时间:2023-12-04 22:57:01 26 4
gpt4 key购买 nike

我是 Java 的新手,我一直在寻找改进代码的方法。但我似乎不明白这一点,如果有可能的话。

假设我有这段代码(我删除了不相关的部分,所以代码可能看起来很奇怪):

public class NewBody {

public static int distanceScale = 5;

public int x, y;
public float xMeter = x * distanceScale;
public float yMeter = y * distanceScale;

public NewBody(int x, int y){
this.x = x;
this.y = y;
}

public void pixToMeter(){
this.xMeter = distanceScale * this.x;
}

如果我不调用 pixToMeter() 而只是尝试直接使用“instance.xMeter”,它只会返回值 0,即使我已经在构造函数中设置了 x 变量。

所以我的问题是:有没有一种方法可以在不调用方法的情况下正确设置变量?这似乎非常不必要,因为我什至没有向它传递参数。

抱歉我的英语不好,我希望你能理解我想说的。

最佳答案

xMeter 的初始化在 x 仍为零时完成。

这是实际发生的事情:

public NewBody(int x, int y) {
// All fields are zeroed: 0, null, 0.0.

super(); // Object constructor, as Object is the parent class.

// Those fields that are initialized:
xMeter = this.x * distanceScale; // 0.0f * 5
yMeter = this.y * distanceScale;

// The rest of the constructor:
this.x = x;
this.y = y;
}

对于依赖值:

public final void setX(int x) {
this.x = x;
xMeter = this.x * distanceScale;
}

并应用 DRY 原则(不要重复自己):可以放弃 xMeter 的初始化并改为在构造函数中调用 setX(x)。

在构造函数中调用时,将 setX 设为最终值很重要,即:不可覆盖。

关于Java - 在没有方法的情况下编辑实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27809346/

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