如何在不用Java构造U的情况下创建一个新的Class <! - ?extends U - >实例?

时间:2013-12-19 15:49:51

标签: java class instance

我正在制作一个类似于孢子细胞阶段的游戏,在游戏中你构建生物体以对抗其他进化的生物体,在游戏中每个OrganismArrayList Cell组成}第

有不同类型的细胞具有不同的行为,所有这些细胞都有自己的类,它扩展了类Cell

当两个生物产生后代时,我会遍历其父母的ArrayLists并逐个细胞地比较它们, 我可以确定该索引中将包含哪种类型的Cell(基于它在相对于CellNucleus的相同位置的父节点),并且我想创建该确切类型的Cell而不必列出每种类型的Cell带if语句的单元格

我实际上更有效地完成了上述工作,但我为了便于阅读而简化了

简单地说,我在工具类中创建了这个函数,我不知道如何完成它:

    public static Class<?extends Cell>copyCell(Class<?extends Cell> cellz)
    {

        return ?

    }

3 个答案:

答案 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建议的方法。