在外部类之外使用类型化内部类时理解“格式不正确的类型,在原始类型上给出的类型参数”

Wol*_*one 5 java generics nested-generics

我对以下内容有点困惑,非常感谢您的帮助。

我想做的是实现一个通用的循环列表,我可以从外部访问节点(而不是它们的值)。我将尝试给出一个最小的设置来说明这一点。

class CircularList<T>{
    Node<T> first;
    /*Implementation details..., getters, setters */
    public Node<T> getFirst(){ return this.first };

    public class Node<U>{
        /*...*/
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中的用法:

CircularList<Vertex> vertices = new CircularList<>();
/*...*/
Node<Vertex> vertex = vertices.getFirst();
Run Code Online (Sandbox Code Playgroud)

在最后一行中,它说在原始类型上给出的类型参数,我不太明白。我不明白这怎么是原始类型。我通过 CircularList 的类型参数以及 getFirst 返回一个 Node 的事实认为该类型不会是原始的,但我显然是错误的。

Mau*_*rry 5

您没有指定参数CircularList

CircularList<Vertex>.Node<Vertex> vertex = vertices.getFirst();
Run Code Online (Sandbox Code Playgroud)

更新

但这没有多大意义:您应该将类​​声明Node<U>为静态,或者不为其指定任何参数(并使用封闭类的参数 T)。