[英]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.