在电话采访中,有人问我以下问题:

给定以下类定义:

public class ClassA {
    public ClassA(int x) {
       // do some calculationand initialize the state
    }
}

其子类使用随机整数生成器初始化父类(super class)。
public class ClassB extends ClassA {
    public ClassB() {
       super(StaticUtilityClass.someRandomIntegerValGenerator())
    }
}

您需要截取x的值(由someRandomIntegerValGenerator产生的随机int值)并将其存储在ClassB成员中。 ClassA不能更改。
我最终不知道如何完成此操作,因为ClassB构造函数内部的第一个调用需要是对super()的调用。直到调用super()为止,ClassB才没有状态,并且someRandomIntegerValGenerator生成的值不能分配给任何ClassB成员。我唯一的方向是使用
线程本地
但我认为这应该是更简单的解决方案。

有什么想法吗?

最佳答案

这个怎么样:

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;
}

10-07 13:22
查看更多