簡體   English   中英

在運行時更改類類型

[英]Change class type at runtime

我有兩個類(讓我們稱之為AB ),都繼承自一個公共超類( C )。

假設我需要構建一個C List 我的問題是,根據C的構造函數收到的數據,我需要在列表中放置一個AB對象。

有沒有辦法從C的構造函數中執行此操作? 或者,或者,我該如何解決這個問題?

這聽起來像是一個使用工廠模式的好地方。 基本上,使用返回類型為C的靜態方法創建一個類CFactory。然后,該方法可以決定創建A或B並返回該值。

這稱為工廠模式。

工廠模式:簡單來說,如果我們有一個超類和n個子類,並且基於提供的數據,我們必須返回其中一個子類的對象,我們使用工廠模式。

您的實現將類似於:

public class C {
//methods
}// End of class

public class A extends C {
//methods
}// End of class

public class B extends C {
//methods
}// End of class

public class CFactory {
     public static void main(String args[]) {
         CFactory factory = new CFactory();
         factory.getObjects(args[0]);
     }
     public C getObjects(String type) {
         if (type.equals("A"))
             return new A();
         else if(type.equals("B"))
             return new B();
         else
             return null;
     }
}// End of class

結帳示例:

http://www.allapplabs.com/java_design_patterns/factory_pattern.htm

C的構造函數無法做到這一點。 您可以在C中創建一個工廠方法,根據收到的數據創建A或B:

class C {
   public final static C newInstance(Object data) {
        if (inspect(data)) {
            return new A(data);
        }
        return new B(data);
   }
}

你為什么需要從C的構造函數中做到這一點? 移動任何邏輯確定要將哪個類型實例化到其他地方,然后在那里創建具體類型?

抽象工廠方法應該幫助您決定使用哪個C實現

public abstract class CFactory{
    public abstract C createCObject(data...){
        if (something) {
             return new A();
        }else{
            return new B();
        }
    }
}

然后你可以使用抽象工廠方法構建List ...

希望這有助於......

不能。您無法從C的構造函數創建A或B對象。

您可以使用C中的靜態方法創建A或B.或者,您可以創建一些工作類來執行此操作。

暫無
暫無

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

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