A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李洪因 中级黑马   /  2013-1-16 20:52  /  1695 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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:35

5 个回复

倒序浏览

回帖奖励 +4

The method add(String) in the type Collection<String> is not applicable for the arguments (Name)
报错是肯定的。
你为什么说String对象能指向Name对象呢?
泛型啊。别瞎搞啊。楼主。。。
回复 使用道具 举报
Collection<String> con=new HashSet<String>();
加了泛型了,说明这个集合只能存String类型
错误时因为你存的是对象
con.add(new Name("hi","ji"));//add显示错误
con.add(new Name("fi","ki"));//add显示错误

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9

查看全部评分

回复 使用道具 举报
Collection<String> con=new HashSet<String>();这语句用到了泛型,泛型是JDK1.5以后出现的机制
泛型的出现提高了程序的安全性,将运行期遇到的问题转移到了编译期,省去了类型强转的麻烦。
这句语句是规范了集合必须添加的是String类型,所以你添加的new Name()不是String类型,在编译的时候程序就会报错

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9

查看全部评分

回复 使用道具 举报
你好
你集合用到泛型,只能添加String类型,你添加Name对象,它认为不是String所以会报错。
回复 使用道具 举报
明白啦,谢谢各位!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马