2014-10-06 53 views
0
接口

嗯,我有一個非常簡單的問題,我似乎無法找到解決我的路......在Java中使用

對於一類,我不得不實施具有二叉樹的接口方法如:

public List<Node<E>> listAll(); 

我們需要有一個名爲MyNode.java的類,這是我用來製作我的樹的類。因此,要列出我想我會做這一切的孩子:

public List<Node<E>> listAll(){ 
    List<Node<E>> childList = new ArrayList<>(); 
    MyNode<E> thisNode = this.l; 

    while(thisNode!= null){ 
     childList.add(thisNode); 
     thisNode = thisNode.l; 
    } 

    return childList; 
} 

和等設定的孩子

public void setChild(Node<E> child){ 
    E elem = child.getElement(); 
    MyNode<E> newNode = new MyNode(elem); 
    this.l = newNode; 
} 

所以我的問題是做一些事情:我要對這個正確?如果我嘗試創建一個節點,我不能因爲我的節點被稱爲MyNodes,但是當我嘗試創建MyNodes列表並返回它們時,它會給我一個錯誤,因爲我沒有遵循界面。當我嘗試製作該方法接受MyNode而不是Node,它說我沒有跟隨接口。下面多一點澄清..

我目前正在使用的工具聲明來實現Node.java接口。當我寫的是由我的接口指定爲方法:

public void setChild(Node<E> child); 

然後我我目前充實的方法,像這樣:

public void setChild(Node<E> child) { 
    E elem = child.getElement(); 
    MyNode<E> newNode = new MyNode<E>(elem); 
    MyNode<E> transNode = this.l; 
    if(transNode!=null){ 
     while(transNode.r!=null){ 
      transNode = transNode.r; 
     } 
     transNode = newNode; 
    } 
    else transNode = newNode; 
} 

你可以看到我是如何得到從輸入子元素,創造一個新的MYNODE出它把作爲新的孩子,而不是僅僅注入節點到我的樹這是錯的嗎?我似乎無法獲得另一種工作方式......

回答

0

一般來說,除非您想要抽象,您實際上會編寫抽象的不同實現,否則不需要創建接口。在你的情況下,class Node<T>將滿足您的需求。

0

通常認爲使用API​​的接口是很好的形式。
簡單地說,這樣做:

  • 允許調用者提供他們所喜歡的任何實施
  • 使測試更容易,在石頭上用嘲笑
  • 鑿子API量最少尤其是當

請參閱Liskov substitution principle

0

接口對於使代碼具有通用性是很好的。如果你想有一個Node類的多個實現,每個實現都有相同的方法,那麼創建一個接口將是一個好主意。

另外,如果你想強制一個API給其他人使用,並且接口是正確的方法。您可以製作接受任何實現該接口的對象的方法。

如果您只是爲簡單的二叉樹實現創建一個Node類,它可能沒有意義。您的二叉樹可能需要實現一個Collection接口,以使其可用作通用結構。

如果您想在開始之前將自己約定爲API,那麼接口可能會是一種很好的方法。