簡體   English   中英

在調用超類的構造函數之前,是否無法執行初始化?

[英]Is it impossible to perform initialization before calling a superclass's constructor?

我想要一個具有某些構造函數參數的某個超類的子類來加載包含我想要傳遞給超構造函數的信息的XML文件。 這不可能實現嗎?

如何使用工廠方法呢? 也許是這樣的:

private MyObject(ComplexData data)
{
    super(data);
}

public static MyObject createMyObject(String someParameter)
{
    ComplexData data = XMLParser.createData(someParameter);
    return new MyObject(data); 
}

您可以在super()調用中調用靜態方法,例如

public Subclass(String filename)
{
    super(loadFile(filename));
}

private static byte[] loadFile(String filename)
{
    // ...
}

不可能,沒有。 凌亂,可能非常。

我之前需要這樣做,並發現最簡單最干凈的方法是處理它,然后在調用構造函數之前加載數據,然后將其作為參數傳遞。

我喜歡工廠的答案,但你有時也可以這樣做:

public MyObject(String parm) {
    super(parseComplex(parm));
}

private static ComplexData parseComplex(String parm) {
    ....
    return new ComplexData(...);
}

我喜歡馬修的建議。 這種方法的一個變體是創建設法預加載數據的對象,並將它們傳遞給對象的構造函數。

我在一個正在為客戶工作的項目中這樣做。 有一堆需要加載的配置文件。 我還需要在構造依賴對象之前建立數據庫和Web服務連接。

它工作得很好,很簡單,當其他人繼承這個代碼時,他們很容易遵循邏輯。 這提高了客戶端的價值。

暫無
暫無

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

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