好的,我希望我不会尝试在这里实现不可能的事情。扩展抽象类的工厂模式通用接口
我有一个用于实现其特定类final class Rastrigin extends MathFunc
,final class Griewangk extends MathFunc
和final class Rosenbrock extends MatjFunc
数学函数Rastrigin,Griewangk和的ROSENBROCK一个抽象类abstract class MathFunc
。
我需要一个包含ArrayList的Generation类,它必须包含Rastrigin/Griewangk/Rosenbrock类型的多个对象。这些对象应该彼此分开实例化,因为Rastrigin/Griewangk/Rosenbrock在它们的构造函数中生成应该保持随机的随机数。
从我以前的问题here我设法实现一个版本,开始完全初始化,但通过ArrayList重复相同的Rastrigin(例如)对象。从那里给出的答案我明白,我应该使用工厂模式分别实例化每个对象。从答案我有这块代码:
interface MathFuncFactory <T extends MathFunc()>{
T createFunc();
}
但它不起作用。我怎样才能正确实施这个设计,并按照我希望的方式进行工作?也可以在我的Generation类中实例化T类型的对象吗?我是一个在java中的新手,非常感谢你的详细解释。
p.s.我做了第二个答案,因为它与Java中泛型类的使用最初的问题并不相关。
事实上,我对那里遗忘的抽象是错误的。我的问题是:使用'MathFuncs()'类可以在Generation中实例化新的Rastrigin对象吗? – Edeph
另外'返回新的MathFuncFactory()'抛出一个错误,因为它说它是匿名的 – Edeph
你想要做的是给'Generation'一个实例化新的'Rastrigin'对象的方法,这种方式就是'MathFuncFactory'。所以,你将一个工厂传递给'Generation'的构造函数,然后'Generation'在该工厂调用'create()',然后实际实例化新的'Rastrigin'。 –