理解"不正确形成的类型,在原始类型上给出的类型参数"在外部类外部使用类型化的内部类时

时间:2018-06-12 09:00:47

标签: java generics nested-generics

我对以下内容感到有些困惑,并感谢您的帮助。

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

jupyter notebook dream.ipynb

在另一个班级中使用:

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

    public class Node<U>{
        /*...*/
    }
}

在最后一行中,它描述了在原始类型上给出的类型参数,我并不理解。我不明白这是一种原始类型。我想通过CircularList的类型参数和getFirst返回的事实 一个节点,该类型不会是原始的,但我显然是错的。

2 个答案:

答案 0 :(得分:3)

您没有指定CircularList的参数:

CircularList<Vertex>.Node<Vertex> vertex = vertices.getFirst();

更新

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

答案 1 :(得分:2)

下面:

public class Node<U>{

应该说Node

您班上已经有一个通用类型T;显然,Ts的循环列表只应该包含T的节点。

基本上你引入了另一个第二类参数。除了&#34;混乱&#34;之外什么都不会增加。另请注意,您的内部Node类不是静态的,因此没有什么能阻止您说T的实例在T中是通用的,就像封闭列表类一样。

您的代码完全没有任何理由添加了第二个泛型参数。