当前位置: 代码迷 >> java >> 如何创建一个新类来处理Java中的其他两个类?
  详细解决方案

如何创建一个新类来处理Java中的其他两个类?

热度:27   发布时间:2023-08-04 09:31:44.0

我有两个类,分别为“ J48Tree”和“ RandomTree”。 它们都是“ AbstractTree”的子类。

“ J48Tree”和“ RandomTree”具有称为“ graph()”的方法,“ AbstractTree”的其他子类没有此方法。

以上这些类和graph()方法来自现有的API。 所以我不需要重写它们。

现在,我想创建一个名为“ Visualization”的新类。 此类可以接收“ J48Tree”和“ RandomTree”作为遗传输入数据。 然后运行他们的“ graph()”方法。

我试过了

public class Visualization  <T super J48Tree>

public class Visualization  <T extends AbstractTree>

但这是行不通的。

我该如何解决这个问题?

提前致谢。

您可以看一下策略设计模式: :

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

正如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();
    }
}

然后,可以通过调用setGraphableVisualization类上设置Graphable实现。

编辑

根据您的评论,我知道您无法使J48TreeRandomTree实现Graphable接口(这是您必须对类进行的唯一更改)。 在这种情况下,您应该将每个类的实例“包装”到另一个实现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是“包装”一个J48Tree ,然后调用setGraphable使用它(与相同RandomTreeWrapper )。

public static void main(String[] args) {
    J48TreeWrapper wrapper = new J48TreeWrapper(new J48Tree());
    Visualization visualization = new Visualization();
    visualization.setGraphable(wrapper);
    visualization.graph();
}
  相关解决方案