黑马程序员技术交流社区

标题: 关于集合类的错误,请赐教 [打印本页]

作者: 李洪因    时间: 2013-1-16 20:52
标题: 关于集合类的错误,请赐教
public class Number1 {
public static void main(String[] args) {
Collection<String> con=new HashSet<String>();
con.add("hello");
con.add(new Name("hi","ji"));//add显示错误
con.add(new Name("fi","ki"));//add显示错误
System.out.print(con);
}
}
class Name implements Comparable{
     String firshname,lastname;
     Name(String firshname,String lastname){
      this.firshname=firshname;
      this.lastname=lastname;
     }
     public String getfirshname(){
      return firshname;
     }
     public String getlastname(){
      return lastname;
     }
     public String toString(){
      return firshname+" "+lastname;
     }
@Override
public int compareTo(Object o) {
  Name n=(Name)o;
  int lastcom=lastname.compareTo(n.lastname);
  return (lastcom !=0 ?lastcom : firshname.compareTo(n.firshname));
}



}

当Collection<String> con=new HashSet<String>();这句中去掉<String>,换成
Collection con=new HashSet();就可以运行啦!请问为什么?

作者: 王少雷    时间: 2013-1-16 21:05
The method add(String) in the type Collection<String> is not applicable for the arguments (Name)
报错是肯定的。
你为什么说String对象能指向Name对象呢?
泛型啊。别瞎搞啊。楼主。。。
作者: 夏振博    时间: 2013-1-16 21:10
Collection<String> con=new HashSet<String>();
加了泛型了,说明这个集合只能存String类型
错误时因为你存的是对象
con.add(new Name("hi","ji"));//add显示错误
con.add(new Name("fi","ki"));//add显示错误
作者: 唐晓    时间: 2013-1-16 21:13
Collection<String> con=new HashSet<String>();这语句用到了泛型,泛型是JDK1.5以后出现的机制
泛型的出现提高了程序的安全性,将运行期遇到的问题转移到了编译期,省去了类型强转的麻烦。
这句语句是规范了集合必须添加的是String类型,所以你添加的new Name()不是String类型,在编译的时候程序就会报错
作者: 何竹冬    时间: 2013-1-16 21:21
你好
你集合用到泛型,只能添加String类型,你添加Name对象,它认为不是String所以会报错。
作者: 李洪因    时间: 2013-1-17 12:42
明白啦,谢谢各位!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2