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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家主要看PrintColl( )这个方法有没有问题就行

/*定义一个Person类,用泛型是实现可以接受Person类本身及其子类。

*/
import java.util.*;
class Person implements Comparable
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public int compareTo(Object obj)
        {
                Person p=(Person)obj;
           int num=this.name.compareTo(p.name);
           if(num==0)
                   return new Integer(this.age).compareTo(new Integer(p.age));
           return num;
        }
}

class Worker extends Person
{
        Worker(String name,int age)
        {
                super(name,age);
        }
}

class Student extends Person
{
        Student(String name,int age)
        {
                super(name,age);
        }
}
class PersonGeneric
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                /*TreeSet ts=new TreeSet();
                ts.add(new Person("zhangsan",80));
                ts.add(new Person("zhangsan",21));
                ts.add(new Person("lisi",22));
                ts.add(new Person("wangwu",18));*/

                TreeSet<Person>  ts2=new TreeSet<Person>(new myCompar());
                ts2.add(new Person("zhangsan",8888888));
                ts2.add(new Person("zhangsan",21));
                ts2.add(new Person("lisi",22));
                ts2.add(new Person("wangwu",18));

            Iterator<Person>  it=ts2.iterator();
                while(it.hasNext())
                {        Person p=it.next();
                        System.out.println(p.getName()+":::"+p.getAge());
                }

                //printColl(al);
        }
        /*public static void printColl(ArrayList<?> al)
        {
            Iterator<Person>  it=al.iterator();
                while(it.hasNext())
                {        Person p=it.next();
                        System.out.println(p.getName()+":::"+p.getAge());
                }
        }*/
}

//;比较器
class myCompar implements Comparator<Person>
{
        public int compare(Person o1,Person o2)
        {
                //Person p1=(Person)o1;
                //Person p2=(Person)o2;

                //return p1.getName().compareTo(p2.getName());
                return o1.getName().compareTo(o2.getName());
        }
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
  /*public static void printColl(ArrayList<?> al)
         {
             Iterator<?>  it=al.iterator();
                 while(it.hasNext())
                 {        Person p=it.next();
                         System.out.println(p.getName()+":::"+p.getAge());
                 }
         }*/ 发错了,这也是个问号   Iterator<?>  it=al.iterator();
回复 使用道具 举报
亲爱的小孩 发表于 2012-11-29 18:13
/*public static void printColl(ArrayList al)
         {
             Iterator  it=al.iterator();

        public static<Person> void printColl(ArrayList<Person> al)
        {
            Iterator<Person>  it=al.iterator();
                while(it.hasNext())
                {        Person p=it.next();
                        System.out.println(p.getName()+":::"+p.getAge());
                }
        } <?>没指定类型貌似不能操作,可是这么写为什么还是不行?
回复 使用道具 举报
OK,解决了。首先如果是类型不确定,<?>可以接受任何类型,
public static<T> void prinColl(TreeSet<T>  al)
{
    这种形式的泛型是泛型方法,可以接受某一类型,并调用其相应的方法。用问号定义的不可调用具体方法。
}
public static void printColl( ArraylList<Person> pe)
{
    我的错误是上边定义的是TreeSet,下边错写成了ArrayList.  还有就是和泛型方法混淆了 void前加了一个<preson>
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马