内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