gpt4 book ai didi

java - 子类中的最终变量初始化

转载 作者:行者123 更新时间:2023-11-30 06:26:37 24 4
gpt4 key购买 nike

public class A {

final int x;

public A(int x) {
if ( this instanceof B ) {
if(x > 5)
this.x = x;
else
this.x = 0;
} else {
this.x = 0;
}

}
}

public class B extends A {

public B(int x) {
super(x);
}
}

我想将 if 放在 B 类中以避免 instanceof (因为我有更多子类,并且 x 值取决于子类),但是当我这样做时,我收到编译器错误:构造函数调用必须是第一个语句在构造函数中!

你能帮我避免使用instanceof吗?

最佳答案

我们可以通过两种方式初始化常量,第一种是在 Adam 的答案的同一行上初始化它们,第二种是使用您要实现的构造函数。

使用内联初始化通常更灵活,因为我们不受构造函数的规则约束,例如 this(...)super(...) call 应该是构造函数中的第一个。但是,如果您确实想使用构造函数来达到此目的,您可以使用包含逻辑的方法作为内联调用作为 this(...) 或 super(...) 的参数。这个方法应该是静态的,因为当我们在构造函数中时,类的实例还不存在。以下是一个简单的解决方案。

class A {

final int x;

public A(int x) {
this.x = 0;
}
}

class B extends A {

public B(int x) {
super(getValueForX(x));
}

private static int getValueForX(int x) {

return x > 5 ? x : 0;
}
}

关于java - 子类中的最终变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078189/

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