如何创建一个新的 class 来处理 Java 中的另外两个 class?

How do I create a new class to process two other classes in Java?

我有两个 class 叫做 "J48Tree" 和 "RandomTree"。它们都是 "AbstractTree" 的子class。

"J48Tree"和"RandomTree"有一个叫做"graph()"的方法,"AbstractTree"的其他子class没有这个方法。

上面这些classese和graph()方法来自exsitingAPI。所以我不需要重写它们。

现在我想创建一个名为“可视化”的新 class。这个 class 可以接收 "J48Tree" 和 "RandomTree" 作为基因输入数据。然后 运行 他们的 "graph()" 方法。

我试过了

public class Visualization  <T super J48Tree>

public class Visualization  <T extends AbstractTree>

但是没用。

如何解决这个问题?

提前致谢。

你可以看看策略设计模式: http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

适合你提到的场景,因为行为(方法)需要根据传递的输入对象在运行时决定。

正如 Florian 所说,您想创建一个接口 Graphable 并让 J48TreeRandomTree 实现它。

public interface Graphable {
    void graph();
}

public class J48Tree extends AbstractTree implements Graphable {
    @Override
    public void graph() {
        // implementation
    }
}

public class RandomTree extends AbstractTree implements Graphable {
    @Override
    public void graph() {
        // implementation
    }
}

public class Visualization {
    private Graphable graphable;

    public void setGraphable(Graphable graphable) {
        this.graphable = graphable;
    }

    public void graph() {
        this.graphable.graph();
    }
}

然后,您可以通过调用 setGraphable.

Visualization class 上设置 Graphable 实现

编辑

根据您的评论,我了解到您无法使 J48TreeRandomTree 都实现 Graphable 接口(这是 classes 上唯一的变化必须制作)。在这种情况下,您应该 'wrap' 每个 class 的一个实例到另一个 class,一个实现 Graphable.

的包装器
public interface Graphable {
    void graph();
}

public class J48TreeWrapper implements Graphable {
    private final J48Tree j48Tree;

    public J48TreeWrapper(J48Tree j48Tree) {
        this.j48Tree = j48Tree;
    }

    @Override
    public void graph() {
        this.j48Tree.graph();
    }
}

public class RandomTreeWrapper implements Graphable {
    private final RandomTree randomTree;

    public RandomTreeWrapper(RandomTree andomTree) {
        this.randomTree = randomTree;
    }

    @Override
    public void graph() {
        this.randomTree.graph();
    }
}

public class Visualization {
    private Graphable graphable;

    public void setGraphable(Graphable graphable) {
        this.graphable = graphable;
    }

    public void graph() {
        this.graphable.graph();
    }
}

现在,您首先必须创建一个 J48TreeWrapper 的实例,该实例 'wraps' 一个 J48Tree,然后您调用 setGraphable 使用它(与 RandomTreeWrapper).

public static void main(String[] args) {
    J48TreeWrapper wrapper = new J48TreeWrapper(new J48Tree());
    Visualization visualization = new Visualization();
    visualization.setGraphable(wrapper);
    visualization.graph();
}