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



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

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

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

在另一个类中的用法:

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

在最后一行中,它说在原始类型上给出的类型参数,我不太明白。我不明白这是原始类型。我仔细考虑了 CircularList 的类型参数以及 getFirst 返回的事实 一个节点,该类型不会是原始的,但我显然错了。

您没有指定要CircularList的参数:

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

更新

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

在这里:

public class Node<U>{

应该说Node

你的类中已经有一个泛型类型T;显然,RoundularList of T 应该只包含 T 的节点。

基本上,您引入了另一个第二种类型参数。这只会增加"混乱"。另请注意,您的内部 Node 类不是静态的,因此没有什么可以阻止您说 Node 的实例在 T 中是泛型的,就像封闭列表类一样。

您的代码无缘无故地添加了第二个泛型参数。

最新更新