內T形我有一個用於實現其特定類final class Rastrigin extends MathFunc
,final class Griewangk extends MathFunc
和final class Rosenbrock extends MatjFunc
數學函數Rastrigin,Griewangk和的ROSENBROCK一個抽象類abstract class MathFunc
。如何實例化一個模板類
這個層次的類以及它們如何定義到目前爲止完美無缺,所以我認爲沒有必要在這個領域尋求改進。
現在我必須實現另一個類Generation
,它將有一些ArrayLists
在裏面,但事情是我需要有一個世代實現上述每個數學函數。 所以,我需要這樣的東西:
ArrayList<Rastrigin> rast = new ArrayList<>();
ArrayList<Griewangk> grie = new ArrayList<>();
ArrayList<Rosenbrock> rose = new ArrayList<>();
這些名單我有我需要實例一些Rastrigin/Griewangk /的ROSENBROCK對象中。
我從過去的C++項目中瞭解到,我可以使用模板來指定一個通用數據類型,我在想這是我的解決方案。我到目前爲止的實現如下所示:
public class Generation <MathFunc> {
private final ArrayList<MathFunc> pop = new ArrayList<>();
private final ArrayList<MathFunc> nextpop = new ArrayList<>();
private final ArrayList<MathFunc> Crossover = new ArrayList<>();
Generation(MathFunc tp)
{
for(int i = 0; i < PopSize; i++)
{
pop.add(tp);
}
}
}
但問題是:我可以使用抽象類實例化依賴它的對象嗎?還有另一種方法可以做到嗎?我對模板的使用感到困惑。
但做Generation(Mathfunc tp)
似乎有點奇怪,因爲抽象類不可實例化。
P.S. This似乎是一個可能的解決方案,但我很不確定它或它如何實際工作。
你想給我們e同一'MathFunc'子類的多個實例?或者將多個相同的實例('tp')添加到列表中是否正確? – Thomas
@Thomas我想添加在類型Rastrigin的10代對象或Rosenbrock類型的10個對象的列表中,但我不知道如何實例化它們。 – Edeph
@Thomas請查看您對答案的評論,併爲工廠模式提供一些解釋。 – Edeph