gpt4 book ai didi

Java - 在 Super 之前设置类属性

转载 作者:行者123 更新时间:2023-12-03 11:19:28 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What's wrong with overridable method calls in constructors?

(8 个回答)


12 个月前关闭。




我有以下类(class):

public abstract class MyAbstractClass {
protected int x;
protected int number;
public MyAbstractClass(int x) {
this.x = x;
this.number = this.generateNumber();
}
public abstract int generateNumber(); // This class is called in the super constructor and elsewhere
}
public class MySubClass extends MyAbstractClass {
private int y;
public MySubClass(int x, int y) {
super(x);
this.y = y;
}
@Override
public int generateNumber() {
return this.x + this.y; // this.y has not been initialized!
}
}
我的问题是 MySubClassy必须在运行 super 构造函数之前初始化属性,因为使用 y 的方法在 super 构造函数中运行。
我知道即使有一些偷偷摸摸的解决方法,这也可能是不可能的,但我还没有找到替代解决方案。
另外请记住,我将有更多的派生类,将不同的值传递给它们的构造函数。

最佳答案

您可以将数字计算推迟到需要时。

public abstract class MyAbstractClass {
protected int x;
protected Integer number;

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

public int getNumber() {
if (number == null) {
number = generateNumber();
}
return number.intValue();
}

protected abstract int generateNumber();
}

关于Java - 在 Super 之前设置类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64113493/

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