gpt4 book ai didi

Java:在 super 之前在子类中分配最终变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:33 26 4
gpt4 key购买 nike

我有一个 A 类,它包含一个最终的 int,valA。

我有一个子类 B,其中包含一个大的最终对象 objB。

valA 的值取决于通过 B 的构造函数传入的 objB。

如何创建 B 的实例?

我已经为我想要做的事情包含了最少的代码。

public class Test {
public static void main(String[] args){
System.out.println(new B(3).valA);
}
static class A{
final int valA;
A(int valA) {
this.valA = valA;
}
}
static class B extends A{
final Object objB;
B(int initVal) {
this.objB = someMethod(initVal);
super(objB.hashCode()+1);
}
}
Object someMethod(int initVal){
// pretend there's some super complicated logic that returns a large object
return new Object();
}
}

最佳答案

super 构造函数调用必须是构造函数中的第一条语句。因此,B 应该如下所示:

static class B extends A{
final int valB;
B(int valB) {
super(valB+1);
this.valB = valB;
}
}

此外,您不能对 super 构造函数调用中的实例方法进行任何引用。您可以将 initC() 设为 static 方法,但这会违背其目的,因为您无法再从 initC() 中分配实例变量>

给出更新后的问题...

您无法解决这个初始化问题,这实际上是一个设计问题。我建议您将非常大的对象的构造提取到外部“工厂”,并降低 AB 初始化的复杂性,使构造函数尽可能 slim 可能。

关于Java:在 super 之前在子类中分配最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085976/

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