为什么输入<k,v>中需要输入参数<k,v>?

时间:2015-09-03 03:52:30

标签: java generics

java.util.Map中(如下所示),<K, V>的类型参数Entry超过<K, V>的阴影类型参数Map

interface Map<K,V> {
      ......
      interface Entry<K,V> {
           .....
      }
}
来自here

class DblyLinkList具有以下内部类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

的类型参数蒙上阴影的原因

1 个答案:

答案 0 :(得分:6)

在类或接口内定义的接口是静态的,这意味着它们无法访问其父类的泛型参数。因此Entry需要来自其父级的KV

相比之下,DListNodeDblyLinkList<T>的内部类,因此可以访问泛型类型T - 它实际上也包含一个返回其包含类的引用。

注意,如果DListNode被定义为static class(我将如何定义它),它将不再是内部类,因此无法访问其父项通用参数 - 以及所以也需要DListNode<K,V>