は私が私が持っていた電話インタビューの間に、次の質問をしました。スーパークラスのコンストラクタ引数をインターセプトするには?次のクラス定義を考えると</p> <p>::ランダムな整数ジェネレータを使用してスーパークラスを初期化し</p> <pre><code>public class ClassA { public ClassA(int x) { // do some calculationand initialize the state } } </code></pre> <p>とその子クラス
public class ClassB extends ClassA {
public ClassB() {
super(StaticUtilityClass.someRandomIntegerValGenerator())
}
}
あなたは、xの値(someRandomIntegerValGeneratorによって生成ランダムint)を傍受し、ClassBのメンバーに保管する必要があります。 ClassAは変更できません。 ClassBコンストラクタ内の最初の呼び出しがsuper()の呼び出しである必要があるため、これをどうすればいいのか分かりませんでした。 super()が呼び出されるまで、ClassBの状態はなく、someRandomIntegerValGeneratorによって生成された値はClassBメンバーに割り当てられません。私が持っていた唯一の方向は、 ThreadLocal を使っていましたが、もっと簡単な解決策に違いないと思います。
どのような考えですか?
xがその時点 – aviad
@aviadで失われますか? –
「this」の代わりに「super」であってはなりませんか?タスクの条件までになるだけですか? – Gangnus