我有两个名为" 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>
但它没有用。
如何解决这个问题?
提前致谢。
答案 0 :(得分:1)
您可以查看策略设计模式: http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
看看你提到的场景,因为行为(方法)需要根据传递的输入对象在运行时决定。
答案 1 :(得分:1)
正如弗洛里安所说,你想创建一个界面 Students.findOne({
_id: data._doc._id
}).populate('userId','-password').exec(function (err, data) {
if (err) {
return res.json({
success: false,
exception: err
});
}
else{
return res.json({
success: true,
userData: data
});
}
});
,并让Graphable
和J48Tree
实现它。
RandomTree
然后,您可以通过调用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();
}
}
在Graphable
课程上设置Visualization
实施。
修改强>
根据您的评论,我们了解到您无法使setGraphable
或J48Tree
实施RandomTree
界面(这是您必须修改的课程的唯一变化)。在这种情况下,你应该包装&#39;每个类的实例到另一个类,一个包装器,实现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();
}
}
的实例来包装&#39; J48TreeWrapper
,然后您使用它J48Tree
(与setGraphable
相同)。
RandomTreeWrapper