2015-09-03 77 views
4

java.util.Map(如下所示)中,類型參數<K, V>Entry在陰影類型參數<K, V>的的Map之上。爲什麼在條目<K,V>中輸入參數<K,V>?

interface Map<K,V> { 
     ...... 
     interface Entry<K,V> { 
      ..... 
     } 
} 

class DblyLinkListhere有以下內部類DListNode不需要掩蓋類型參數T

public class DblyLinkList<T> implements Iterable<T> { 
    ....... 
    class DListNode { 
      private T item; 
     private DListNode prev; 
     private DListNode next; 

     DListNode(T item, DListNode p, DListNode n) { 
      this.item = item; 
      this.prev = p; 
      this.next = n; 
     } 
     } 
     ...... 
} 

能否請你幫我瞭解掩蓋的Map類型參數的原因是什麼?

回答

6

類或接口內部定義的接口是靜態的,這意味着它們無法訪問其父類的通用參數。所以Entry需要其父母的KV

相反,DListNode是內級的DblyLinkList<T>等確實有權訪問所述類型T - 它實際上包含一個參考回其包含類太。

注意,(這是我會怎麼定義它),如果DListNode定義爲static class,這將不再是一個內部類,因此無法獲得其父母的泛型參數 - 因此將需要DListNode<K,V>太。

+0

課內?怎麼能在'class'裏面定義'interface'?讀你的第一行 – overexchange

+1

當然你可以在一個類中定義一個接口。在你的情況下,它定義了一個界面內的接口,但也沒有問題,並且所有相同的衝動都適用(除非訪問修改器默認情況下不同)。 –

+0

一個補充問題,'靜態類節點 implements Map.Entry {..}'有一個構造器。我瞭解到'static class'不是可實例化的。你能澄清一下構造函數'Node(int hash,K key,V value,Node next){..}'的原因嗎? – overexchange

相關問題