簡體   English   中英

如何攔截超類構造函數參數?

[英]How to intercept super class constructor argument?

我在電話采訪中被問到以下問題:

給定以下類定義:

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成員。 我唯一的方向是使用ThreadLocal,但我認為它應該是一個更簡單的解決方案。

有什么想法嗎?

這個怎么樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM