如何在此代码中继承父类的内部类?

ove*_*nge 6 java generics

以下是父类 DblyLinkList

package JavaCollections.list;

import java.util.Iterator;
import java.util.NoSuchElementException;

public class DblyLinkList<T> implements Iterable<T>{

    class DListNode<T> {

        private T item;
        private DListNode<T> prev;
        private DListNode<T> next;

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


    }
.....
}
Run Code Online (Sandbox Code Playgroud)

下面是派生类LockableList,

  package JavaCollections.list;

    import JavaCollections.list.DblyLinkList.DListNode;

    public class LockableList<T> extends DblyLinkList<T> {

        class LockableNode<T> extends DblyLinkList<T>.DListNode<T> {

            /**
             * lock the node during creation of a node.
             */
            private boolean lock;

            LockableNode(T item, DblyLinkList<T>.DListNode<T> p,
                    DblyLinkList<T>.DListNode<T> n) {
                super(item, p, n); // this does not work
                this.lock = false;
            }

        }

        LockableNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
            return new LockableNode(item, prev, next);
        }

        public LockableList() {
            this.sentinel = this.newNode(null, this.sentinel, this.sentinel);
        }


    .....
 }
Run Code Online (Sandbox Code Playgroud)

如果class LockableNode<T> extends DListNode<T>在上面的代码中,错误:The constructor DblyLinkList<T>.DListNode<T>(T, DblyLinkList<T>.DListNode<T>, DblyLinkList<T>.DListNode<T>) is undefined发生在行super(item, p, n)

通过说: class LockableNode<T> extends DblyLinkList<T>.DListNode<T>

我如何理解这个错误?为什么它得到解决?

Hoo*_*pje 5

您正在重新声明T内部类中的类型变量.这意味着在内部类中,T外部类的隐藏并且不再被引用.

由于您有一个非静态内部类,您可以在T那里删除类型变量:

class DListNode { ... }
Run Code Online (Sandbox Code Playgroud)

因为它从包含类继承它(可能你的意思是变量是相同的,无论如何).