2013-04-24 75 views
7

我正在嘗試使用鏈接編寫哈希表的數據結構。當我從嵌套類中刪除關鍵字「靜態」時,出現「無法創建SeparateChaining.Node的通用數組」的錯誤?在我分配內存使用新的Hmap的線上。對於泛型外部類,爲什麼我需要聲明嵌套類是靜態的?

使用static關鍵字可以正常工作。任何人都可以指出關鍵字static在這裏的意義以及它的區別嗎?我正在創建一個對象數組,然後它如何在錯誤中顯示泛型數組(Eclipse)?

public class SeparateChaining<Key,Value> { 

    private int m; 

    private Node[] hmap; 

    private int n; 

    public SeparateChaining() 
    { 
     m=5; 
     n=0; 

     //error here on removal of static keyword from the node class declaration 
       hmap=new Node[m]; 

    } 

    private ____ class Node //works fine with static. Otherwise shows error 
    { 
     private Object key; 
     private Object value; 
     private Node next; 

     public Node(Object k, Object v) 
     { 

      key=k; 
      value=v; 
     } 

    } 

感謝

+0

不應將'key'的類型設置爲'Key',並將'value'的類型設置爲'Value'(而不是'Object')?和構造函數參數一樣嗎? – Dukeling 2013-04-24 19:06:04

回答

6

如果將內部Node類聲明爲static,那麼該類將與外部類SeparateChaining關聯。然後Node實際上是SeparateChaining.Node

如果沒有static,它將與SeparateChaining的一個實例相關聯,這將需要幾個類型參數,因此內部Node類也將需要這些類型參數。 Node然後實際上是SeparateChaining<Key, Value>.Node;在Java中,creating an array of generics是不合法的。

+0

添加到上面它的作品,如果你嘗試和構造節點 IndoKnight 2013-04-24 19:00:29

+0

@Dukeling這會改變程序的意義有點,是嗎? – 2013-04-24 19:04:01

+0

在這種情況下,Node的類型參數將與外部'SeparateChaining'的類型參數不同;它會影響該值,而不是使用它。 – 2013-04-24 19:09:08

0

嗯,這是通用的。如果內部類不是靜態的,那麼類型是SeparateChaining<Key,Value>.Node。當您添加靜態時,則將其視爲類似普通類

-1

Keyowrd static在嵌套類的聲明中表示「我不想引用外部類的對象,非常感謝你」。如果你不把static,那麼內部類的任何對象都有一個對外部類的某個對象的引用。

因此,只能在外部類的對象的非靜態方法內部創建內部非靜態類的對象。

相關問題