我在电话采访中被问到以下问题:
给出以下类定义:
public class ClassA {
public ClassA(int x) {
// do some calculationand initialize the state
}
}
及其子类,它使用随机整数生成器初始化超类。
public class ClassB extends ClassA {
public ClassB() {
super(StaticUtilityClass.someRandomIntegerValGenerator())
}
}
您需要拦截x的值(someRandomIntegerValGenerator生成的随机int)并将其存储在ClassB成员中。 ClassA无法更改。 我最终不知道如何做到这一点,因为ClassB构造函数中的第一个调用需要调用super()。直到调用了super(),没有ClassB的状态,并且someRandomIntegerValGenerator生成的值不能分配给任何ClassB成员。我唯一的方向是使用a ThreadLocal的 但我认为这应该是一个更容易的解决方案。
有什么想法吗?
答案 0 :(得分:10)
这个怎么样:
public class ClassB extends ClassA {
public ClassB() {
this(StaticUtilityClass.someRandomIntegerValGenerator());
}
private ClassB(int x) {
super(x);
// Can access x here, e.g.:
this.x = x;
}
private int x;
}