簡體   English   中英

在某些情況下如何調用超級構造函數?

[英]How to call super constructor on some condition?

在某些情況下可以調用超級構造函數嗎? 我有下面的代碼

private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {

        private AuditDataTable (){
            super();       
        }
}

但是我想在某些Boolean類變量為true時調用super() ,如何實現呢?

現在上面的super()將調用此

 public AuditDataModel() {
        super();
        AuditResulstBean.setAuditResultRowCount(0);
        AuditResulstBean.setAuditResultRowCheck(false);
    }

但是我希望某些條件為false時不調用頂級類super()構造函數。

這不是很好,但是可以(不是您問題的直接答案,而是您問題的解決方案)。 您必須在選擇之前初始化哪個構造函數,因此您將不需要依賴於您的super。 請注意,永遠不要使用doSuper,並且決策要點是落后的。 根據要求提供了一個幾乎完整的工作示例:

private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {

    private AuditDataTable(boolean doSuper){
        super();
    }

    private AuditDataTable(){
        //other constructor
    }

    AuditDataTable getAuditDataTable(boolean useSuper){
        AuditDataTable auditDataTable;
        if(useSuper)
            auditDataTable = new AuditDataTable(true);
        else
            auditDataTable = new AuditDataTable();
        return auditDataTable;
    }
}

在任何情況下,構造函數都將調用超級構造函數。

選擇呼叫/不呼叫的問題是很糟糕的。

看到:

public class UpperClass {
public UpperClass()
{   
System.out.println("UpperClass");
}
public UpperClass(int a)
{
System.out.println("UpperClass 1");
}
}

public class LowerClass extends UpperClass {
    public LowerClass()
    {
    super(1);
    System.out.println("LowerClass");
    }
}

不使用super(1)或使用super(1),在創建LowerClass對象時,您將獲得:

上層階級

下層階級

要么

上等階級1

下層階級

那么問題是:您想要哪個超級構造函數,具有哪些條件?

然后

1您必須具有2個(或多個)超級構造函數,或者只有一個帶參數的超級構造函數

2您必須將此條件從子類傳遞到超類

暫無
暫無

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

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