我正在制作一个类似于孢子细胞阶段的游戏,在游戏中你构建生物体以对抗其他进化的生物体,在游戏中每个Organism
由ArrayList
Cell
组成}第
有不同类型的细胞具有不同的行为,所有这些细胞都有自己的类,它扩展了类Cell
当两个生物产生后代时,我会遍历其父母的ArrayLists并逐个细胞地比较它们,
我可以确定该索引中将包含哪种类型的Cell(基于它在相对于CellNucleus
的相同位置的父节点),并且我想创建该确切类型的Cell而不必列出每种类型的Cell带if语句的单元格
我实际上更有效地完成了上述工作,但我为了便于阅读而简化了
简单地说,我在工具类中创建了这个函数,我不知道如何完成它:
public static Class<?extends Cell>copyCell(Class<?extends Cell> cellz)
{
return ?
}
答案 0 :(得分:3)
您应该使用Class#newInstance()和通用方法
public static <T extends Cell> T cloneCell(Class<T> cellz) {
return cellz.newInstance();
}
不确定,但我认为T
类必须有一个没有参数的构造函数;)
希望它有所帮助!
答案 1 :(得分:2)
您需要在某处创建一个工厂方法,作为单独的工厂对象或作为Cell的一部分。
或者,Java clone()
和Cloneable
方法和接口将允许您复制对象。
如果您不需要复制单元格的数据,那么只需要该类(假设没有参数构造函数),您可以使用cell.getClass().newInstance()
。
答案 2 :(得分:1)
你可以这样做:
public static <T extends Cell> T cloneCell(T original) {
T clone = original.getClass().newInstance();
// Manually set the attributes of the clone
return clone;
}
虽然这会修复您当前的方法,但如果不同的单元格类型具有不同的属性,则它不能很好地工作。为此我会采取另一种方法,如Tim B或Sotirios Delimanolis建议的方法。