黑马程序员技术交流社区

标题: 关于泛型练习疑惑 求助! [打印本页]

作者: Rancho_Gump    时间: 2012-12-7 15:52
标题: 关于泛型练习疑惑 求助!
本帖最后由 张向辉 于 2012-12-8 13:34 编辑

import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
  //System.out.println("Hello World!");
  TreeSet<Person> ts= new TreeSet<Person>();
  ts.add(new Person("abc001",12));
  ts.add(new Person("abc002",14));
  ts.add(new Person("abc003",16));
  ts.add(new Person("abc004",17));
  Iterator t = ts.iterator();
  while(t.hasNext())
  {
    Person per = (Person)t.next();//此处为什么还得进行强转才能编译通过啊,我如果不加Person,便不能通过?迷茫了
    sop(per.getName());
  }
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
}
class Person implements Comparable
{
String name;
int age;
Person(String name,int age)
{
  this.name=name;
  this.age=age;
}
public String getName()
{
  return this.name;
}
public int compareTo(Object obj)
{
  //return this.name.compareTo((Person)obj.name);
  if(!(obj instanceof Person))
   throw new RuntimeException();
  Person p=(Person)obj;
  if(this.age>p.age)
   return 1;
  if(this.age==p.age)
   return this.name.compareTo(p.name);
  return -1;
}
public int getAge()
{
  return age;
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------
Person per = (Person)t.next();//此处为什么还得进行强转才能编译通过啊,我如果不加Person,便不能通过?
不加Person的话得到是什么类型啊?


作者: 新立    时间: 2012-12-7 16:13
Iterator 加泛型就可以了
作者: HM王琦    时间: 2012-12-7 16:21
我也是一名新手,这个问题我也是花了好长时间才搞明白,这里Person per = (Person)t.next();因为迭代器没有定义泛型,默认的是返回的是Object类型,所以要强转成Person
作者: Rancho_Gump    时间: 2012-12-8 13:21
问题已经解决




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