Java在抽象超类中实例化子类

时间:2019-02-11 00:51:16

标签: java abstract instantiation superclass

所以我想为我正在做的某些项目提供一个Neuroevolution库,现在我想使我的代码抽象和通用,以便可以按需要使用它。

为此,我使我的DNA类抽象化,现在遇到了交叉函数的问题,该函数返回具有新基因的自身新实例。

DNA additiveCrossover(DNA partner) {
    List<T> childGenes = new ArrayList<>();

    for(int i = 0; i < genes.size(); i++){
        childGenes.set(i, (addGenes(genes.get(i), (T) partner.getGene(i)));
    }
    return new DNA(childGenes);
}

这以前可以使用,因为我的课程不是抽象的,但是现在我需要找到一种解决方法。

我不想将此方法抽象化,因为该代码在该类的所有实现中都应该相同,并且我不能仅仅使该类不抽象,因为它具有抽象方法。

是否可以实例化抽象类,以便它创建其子级的实例?

我唯一的解决方案是像这样的肮脏抽象方法:

public class DNA <T> {
    public abstract DNA createFromGenes(List<T> genes);
}

public class DNAImplementation {
    @Override
    public DNA createFromGenes(List<T> genes){
        return new DNAImplementation(genes);
    }
}

我真的不喜欢这样,因为它似乎是不必要的代码,而且看起来很糟糕。

我们将不胜感激。

0 个答案:

没有答案