为什么输入<K,V>中需要输入参数<K,V>?

ove*_*nge 4 java generics

java.util.Map(如下所示),类型参数<K, V>Entry超过遮蔽类型参数<K, V>Map.

interface Map<K,V> {
      ......
      interface Entry<K,V> {
           .....
      }
}
Run Code Online (Sandbox Code Playgroud)

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;
        }
      }
      ......
}
Run Code Online (Sandbox Code Playgroud)

你能帮我理解一下阴影类型参数的原因Map吗?

Mic*_*son 6

在类或接口内定义的接口是静态的,这意味着它们无法访问其父类的泛型参数.所以Entry需要KV它的父母一起.

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

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