簡體   English   中英

將構造函數調用傳遞給其他類

[英]Pass constructor call on to other class

我有一個通用的類,可以生成一個UI,一個子類可以生成一個更專業的類。 事實是,超類也通常在多個位置被調用,因此基本上我必須決定在超類天氣中,超類應處理該調用或將其“傳遞”給子類。

public class AddEntryWindow<T extends SomeUiClass>
{

    public AddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener)
    {
        // regular init stuff

        if(T == PartUiClass) // I know this doesn't work like this
        {
            return new AddPartWindow(tableDefinition, refreshListener);
            // I know this doesn't work either.
        }
    }
}


public class AddPartWindow extends AddEntryWindow<PartUiClass>
{

    public AddPartWindow(TableDefinition tableDefinition, RefreshListener refreshListener)
    {
        // (usually super would have to be called here)

        //special init stuff
    }
}

呼叫看起來像這樣:

new OpenBlockingWindowHandler(scene, new AddEntryWindow<T>(TableDefinitionGenerator.getTableDefinitionByClass(elementToSelect), this)));

在Java中這樣的構造有可能嗎? 是否可以讓構造函數“返回”另一個類實例?

在Java中這樣的構造有可能嗎? 是否可以讓構造函數“返回”另一個類實例?

不,構造函數永遠不能返回另一個類的實例。 實際上,將任何 return語句添加到構造函數都被視為Java中的語法錯誤。

事實是,超類也通常在多個位置被調用,因此基本上我必須決定在超類天氣中,超類應處理該調用或將其“傳遞”給子類。

您可以將靜態工廠方法添加到該類,該方法接受type參數的運行時類作為參數。 像這樣:

public static <T extends SomeUiClass> AddEntryWindow<T> createAddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener, Class<T> c){
    if(PartUiClass.class.isAssignableFrom(c)){
        return (AddEntryWindow<T>) new AddPartWindow(tableDefinition, refreshListener);
    }
    return new AddEntryWindow<>(tableDefinition, refreshListener);
}

暫無
暫無

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

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