Мне задали следующий вопрос во время телефонного интервью:
Учитывая следующее определение класса:
public class ClassA {
public ClassA(int x) {
// do some calculationand initialize the state
}
}
и его дочерний класс, который инициализирует суперкласс с использованием генератора случайных целых чисел.
public class ClassB extends ClassA {
public ClassB() {
super(StaticUtilityClass.someRandomIntegerValGenerator())
}
}
вам нужно перехватить значение x (случайное int, производимое someRandomIntegerValGenerator) и сохранить его в элементе ClassB.ClassA не может быть изменен.В итоге я понятия не имел, как это можно сделать, потому что первый вызов внутри конструктора ClassB должен быть вызовом super ().До вызова super () состояние ClassB отсутствует, и значение, созданное someRandomIntegerValGenerator, не может быть назначено ни одному члену ClassB.Единственное направление, которое у меня было, было использование ThreadLocal, но я думаю, что это должно быть более простое решение.
Есть мысли?