在外部 class 之外使用类型化内部 class 时理解 "improperly formed type, type arguments given on a raw type"
Understanding "improperly formed type, type arguments given on a raw type" when using typed inner class outside outer class
我对以下内容有点困惑,非常感谢您的帮助。
我想做的是实现一个通用的循环列表,我可以在其中从外部访问节点(而不是它们的值)。我将尝试提供一个最小的设置来说明这一点。
class CircularList<T>{
Node<T> first;
/*Implementation details..., getters, setters */
public Node<T> getFirst(){ return this.first };
public class Node<U>{
/*...*/
}
}
在另一个class中的用法:
CircularList<Vertex> vertices = new CircularList<>();
/*...*/
Node<Vertex> vertex = vertices.getFirst();
最后一行说 type arguments given on a raw type,我不太明白。我不明白这是一种原始类型。我仔细考虑了 CircularList 的类型参数和 getFirst returns
一个节点,类型不会是原始的,但我显然错了。
这里:
public class Node<U>{
应该说Node
您的 class 中已有通用类型 T
;显然 Ts 的 CircularList 应该只包含 T 的节点。
基本上你引入了另一个第二类参数。除了 "confusion",它什么都不加。另请注意,您的内部 Node class 不是静态的,因此没有什么可以阻止您说 Node 的实例在 T 中是通用的,例如封闭列表 class.
您的代码毫无理由地添加了 second 通用参数。
您没有指定 CircularList
的参数:
CircularList<Vertex>.Node<Vertex> vertex = vertices.getFirst();
更新
但这没有多大意义:您应该将 class Node<U>
声明为静态的,或者不为其指定任何参数(并使用封闭 class).
我对以下内容有点困惑,非常感谢您的帮助。
我想做的是实现一个通用的循环列表,我可以在其中从外部访问节点(而不是它们的值)。我将尝试提供一个最小的设置来说明这一点。
class CircularList<T>{
Node<T> first;
/*Implementation details..., getters, setters */
public Node<T> getFirst(){ return this.first };
public class Node<U>{
/*...*/
}
}
在另一个class中的用法:
CircularList<Vertex> vertices = new CircularList<>();
/*...*/
Node<Vertex> vertex = vertices.getFirst();
最后一行说 type arguments given on a raw type,我不太明白。我不明白这是一种原始类型。我仔细考虑了 CircularList 的类型参数和 getFirst returns 一个节点,类型不会是原始的,但我显然错了。
这里:
public class Node<U>{
应该说Node
您的 class 中已有通用类型 T
;显然 Ts 的 CircularList 应该只包含 T 的节点。
基本上你引入了另一个第二类参数。除了 "confusion",它什么都不加。另请注意,您的内部 Node class 不是静态的,因此没有什么可以阻止您说 Node 的实例在 T 中是通用的,例如封闭列表 class.
您的代码毫无理由地添加了 second 通用参数。
您没有指定 CircularList
的参数:
CircularList<Vertex>.Node<Vertex> vertex = vertices.getFirst();
更新
但这没有多大意义:您应该将 class Node<U>
声明为静态的,或者不为其指定任何参数(并使用封闭 class).