2012-08-31 54 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

這裏你想你的基類轉換爲派生類,這是行不通的,嘗試修復第一 –