2012-08-31 39 views
4

我新的仿制药和这里的通用方法是我的问题:调用子类从Java中

public class Tree<T> { 
    public Collection<Tree<T>> getSubTrees(){}; 
    public Tree<T> getTree(T element){} 
} 


public class DataTree extends Tree<Data>{ 
    public void someMethod(){ 
     DataTree dataTree = this.getTree(root) ;// type mismatch 
     Collection<DataTree> leafs = this.getSubTrees(); //type mismatch 

     //following works 
     Tree<Data> dataTree = this.getTree(root); 
     Collection<Tree<Data>> leafs = this.getSubTrees(); 
    } 
} 

你能告诉我为什么我得到这样的错误或如何正确地投树<数据>到的Datatree到调用DataTree的具体方法?

回答

5

DataTreeTree<Data>Tree<Data>并不总是DataTree

您正在返回Tree<T>,不DataTree。基类不能被铸造成指派类。

+1

的传统方法解决这个问题,顺便说一下,是添加一个额外的通用参数来'Tree':像'树>',然后有孩子是类型的' T'。然后你可以通过说'class DataTree extends Tree “来”结合结“。 –

0

什么是根???它是一个数据元素?

尝试类型强制转换
的Datatree的Datatree =(的Datatree)this.getTree(根)

嗯,我想继承层次结构将不支持这一点,但你仍然可以尝试。

+0

不工作 - ClassCastException异常 – Dmitriy

+0

这里你想你的基类转换为派生类,这是行不通的,尝试修复第一 –