LinkedList中泛型的一点小疑惑

leaftogodown 2012-07-19 11:52:52
对于下面这段代码,我的疑问是为什么第6行会有这样的警告“Type safety: The constructor Node(Object) belongs to the raw type Node. References to generic type Node<T> should be parameterized”。
我的意思是为什么head.next是Node<T>的?(至少警告是这个意思)
明明我类里面next的类型没加泛型<T>啊@_@,求指点迷津,说得底层些也好,分不多,多包涵( ⊙ o ⊙ )啊!

1 package test;
2
3 public class MyLinkedList {
4 public static void main(String[] args) {
5 Node<String> head = new Node<String>("黑桃10");
6 head.next = new Node("黑桃J");
7 System.out.println(head);
8 }
9 }
10 class Node<T>{
11 T value;//当前节点要保存的值
12 Node next;//下一个节点的地址
13 public Node(T value){
14 this.value = value;
15 }
16 public String toString(){
17 return next==null? value.toString() :
18 value.toString() + "," + next.toString();
19 }
20 }

...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raistlic 2012-07-20
  • 打赏
  • 举报
回复

楼上两位属于误导。

楼主如果看了1、3、4楼还不明白,那就去查查什么叫"坯型"(raw type),为什么坯型会被编译器警告。
aa7229806 2012-07-20
  • 打赏
  • 举报
回复
这个是你自己写的LinkedList吧
首先,10 class Node<T>{
11 T value;//当前节点要保存的值
12 Node next;//下一个节点的地址
13 public Node(T value){
14 this.value = value;
15 }
16 public String toString(){
17 return next==null? value.toString() :
18 value.toString() + "," + next.toString();
19 }
20 }
这是你自己写的class,并且用泛型规定了类中的type,也就是说这个Node类中属性的type已经被你统一了,不管是value还是next都是这个type。
然后,你在main中创建对象的时候,规定了type=“String”
5 Node<String> head = new Node<String>("黑桃10");
不管是你的head还好,next还好,都是Node类创建的对象,所以都是String的



默默的伟哥 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我的意思是为什么定义head时加了参数后导致其next也是Node<String>类型了
[/Quote]

因为next对象也是使用你定义的Node类,简单来讲head和next使用的是同一个类
raistlic 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我的意思是为什么定义head时加了参数后导致其next也是Node<String>类型了
[/Quote]

换句话说,你第12行的那句

Node next; //下一个节点的地址

也属于会被警告的代码,就因为它没有为 next 指定泛型类型。
raistlic 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我的意思是为什么定义head时加了参数后导致其next也是Node<String>类型了
[/Quote]


在你的代码中,head的next不是Node<String>,

是坯型(Node)没错,

但是如前所述,任何坯型的使用都会被编译器警告,编译器的警告就是说你用了坯型。
leaftogodown 2012-07-20
  • 打赏
  • 举报
回复
我的意思是为什么定义head时加了参数后导致其next也是Node<String>类型了
raistlic 2012-07-20
  • 打赏
  • 举报
回复
这个Node类已经被定义为泛型类。
任何使用这个类的地方,只要没加泛型参数,都是坯型(raw type)使用,都会被编译器警告。包括第行那个Node next。


package test;

public class MyLinkedList {

public static void main(String[] args) {
Node<String> head = new Node<String>("黑桃10");
head.next = new Node<String>("黑桃J");
System.out.println(head);
}
}

class Node<T> {

T value;//当前节点要保存的值
Node<T> next;//下一个节点的地址

public Node(T value) {

this.value = value;
}

@Override
public String toString() {

return next == null ? value.toString() : value.toString() + "," + next.toString();
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧