簡體   English   中英

Java,類類型列表

[英]Java, list of class types

我正在研究一個java應用程序。 它是一個抽象類Model和2個派生類Model 1和Model 2. Model1和Model2的行為不同,所以我想允許用戶從兩個中選擇一個模型。 它可以實現如下:

Model model;
If(response==1){
    model = new Model1();
}else if(response==2){
    model = new Model2();
}

現在問題是,如果我添加一個新類Model3,我必須重寫代碼。 我可以創建一個List,在那里我將從每個類中添加一個實例,然后我會添加一個靜態方法,它將返回一個新的類實例,但我希望它可以用更多樣式來完成。

是否可以創建一個List來保存每個類的類型 從這個List我可以創建一個菜單來選擇一個模型,然后使用該類型來創建用戶需要的類。

那么有可能創建一個List<Class> ,然后使用Class對象作為構造函數來創建給定類的實例嗎?

您可以創建供應商列表:

static final List<Supplier<Model>> MODEL_MAKERS = ImmutableList.of(
    new Supplier<Model>() { public Model get() { return new Model1(); } },
    new Supplier<Model>() { public Model get() { return new Model2(); } },
    new Supplier<Model>() { public Model get() { return new Model3(); } }
);

您可以使用反射來解決問題,但這需要在Java的正常異常處理機制之外步進,需要零參數的public構造函數和public類,這限制了代碼在維護時如何以未經javac檢查的方式進行更改,並且不是在這種情況下是必要的

如果您確定它將具有公共no-args構造函數,則可以使用Class.newInstance()

對於更復雜的用法,您可以使用Class.getConstructor找到Constructor對象,然后以這種方式調用它。

一旦你擁有了它,就可以相對容易地將你的Class es粘貼到Map或者做一些事情來查找和創建實例。

是的,您可以在Class上使用newInstance()方法來構造一個。 它必須有一個no-args構造函數。

暫無
暫無

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

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