从java中的子类调用泛型方法

时间:2012-08-31 11:54:58

标签: java generics

我是仿制药的新手,这是我的问题:

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

你能告诉我为什么会出现这样的错误或者如何正确地投射Tree&lt; Data&gt;到DataTree调用DataTree的具体方法?

2 个答案:

答案 0 :(得分:5)

DataTreeTree<Data>,但Tree<Data> 并非总是 DataTree

您将返回Tree<T>,而不是DataTree。基类不能投入到被驱动的类中。

答案 1 :(得分:-1)

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

尝试输入类型      DataTree dataTree =(DataTree)this.getTree(root)

我认为继承层次结构不支持此功能,但您仍可以尝试。