0

我想创建一个根据外部类的类型参数化的内部类。

我应该首先说,我意识到可能有更好的方法来实现我想要的结果,我愿意接受那里的建议,但我会描述目前的情况:

我有一个类Node<T>和一个内部类声明的尝试,如下所示:

public class Node<T> {
    ...

    class NodeIterator<Node<T>> implements Iterator {
        ...
    }
}

这会在编译期间导致语法错误,我推断这是由于我使用了外部类,尽管我不确定这一点。

谢谢!

4

2 回答 2

6

只需这样做:

public class Node<T> {
    ...

    class NodeIterator implements Iterator<Node<T>> {
        ...
    }
}

作为内部类, 的实例NodeIterator具有对外部Node实例的隐式引用。因此,该类型T仍在其主体范围内。

请注意,另一种方法是 make NodeIterator static,丢失隐式外部引用:

static class NodeIterator<T> implements Iterator<Node<T>> {
    ...
}

这里,T必须重新T声明,与外部类声明的不同。

有关更多信息,请参阅有关嵌套类的 Java 教程文章

于 2013-08-14T00:05:26.307 回答
1

Iterator在接口而不是内部类上指定泛型类型参数。

import java.util.Iterator;

public class Node<T> {


    class NodeIterator implements Iterator<Node<T>> {

        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public Node<T> next() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void remove() {
            // TODO Auto-generated method stub

        }    
    }
}

我怀疑该语言不允许这样做,因为没有什么可以阻止您实例化与外部类类型不匹配的具体类型,例如:

//calling code
Node<Integer> node = new Node<Integer>();

//Node.java
public class Node<T>{

    NodeIterator<String> nodeIterator = new NodeIterator<String>();
}
于 2013-08-14T00:09:05.873 回答