我对Java对象副本和继承感到好奇。可以说我有以下两个课程:

abstract class Algorithm {
  public abstract void run();
}

class Specialized extends Algorithm {
  @Override
  public void run();
}


现在我要测试专用算法。我真的想与多个实例/参数并行执行此操作。问题是run方法不是可重入的,因此我必须具有Specialized的每线程实例。当然,任何类型的AlgorithmRunner都应与抽象类Algorithm配合使用,以便能够测试多个不同的专业化知识。问题是我需要以通用方式从现有的? extends Algorithm构造一个新的instanceof。我该如何实现?我可以轻松地为每种专业化编写副本构造函数,但是这需要使用检查进行切换,而我宁愿避免这样做。

最佳答案

您可以尝试使用Factory pattern

interface AlgorithmFactory {
    public abstract Algorithm createAlgorithm();
}

class SpecializedFactory implements AlgorithmFactory {
    @Override
    public Specialized createAlgorithm() {
        return new Specialized();
    }
}


然后将AlgorithmFactory传递给AlgorithmRunner,使其可以在不知道其实现的情况下实例化Algorithm的子类。

关于java - 复制构造函数和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29895198/

10-15 17:16