如何拦截超类构造函数参数?

avi*_*iad 5 java constructor

我在电话采访中被问到以下问题:

给定以下类定义:

public class ClassA {
    public ClassA(int x) {
       // do some calculationand initialize the state
    }
}
Run Code Online (Sandbox Code Playgroud)

及其子类,使用随机整数生成器初始化超类.

public class ClassB extends ClassA {
    public ClassB() {
       super(StaticUtilityClass.someRandomIntegerValGenerator())
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要截取x的值(someRandomIntegerValGenerator产生的随机int)并将其存储在ClassB成员中.ClassA无法更改.我最终不知道如何做到这一点,因为ClassB构造函数中的第一个调用需要调用super().直到调用了super(),没有ClassB的状态,并且someRandomIntegerValGenerator生成的值不能分配给任何ClassB成员.我唯一的方向是使用ThreadLocal,但我认为它应该是一个更简单的解决方案.

有什么想法吗?

Oli*_*rth 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;
}
Run Code Online (Sandbox Code Playgroud)