黑马程序员技术交流社区

标题: 关于泛型的一点小疑问 [打印本页]

作者: tangxiaobo1991    时间: 2014-3-21 09:30
标题: 关于泛型的一点小疑问
大家帮我看一看下面的代码哪里有错误,为什么提示我找不符号getName(),我不是已经把person传递给了T吗,为什么找不到方法呢?(下面的红色部分)

import java.util.*;
class FanXingTest2
{
        public static void main(String[] args)
        {
                ArrayList<Person> al=new ArrayList<Person>();
                al.add(new Person("abc1"));
                al.add(new Person("abc2"));
                al.add(new Person("abc3"));
                set(al);
               
        }
        public static <T> void set(ArrayList<T> al)
        {
                Iterator<T> it=al.iterator();
                        while(it.hasNext())
                        {
                                T t=it.next();
                                sop(t.getName());//提示找不到方法。
                                }
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

class Person
{
        private String name;
        Person(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
}


作者: 思绪    时间: 2014-3-21 09:53
public static <T> void set(ArrayList<T> al)
此处你定义的是一个泛型函数,既然传递进去的是Person,那也可以传递进去其他类型
而其他类型不一定有getName()方法。
如果非要在该函数内部使用getName()方法,则应改成:
public static void set(ArrayList<? extends Person> al)
         {
                 Iterator<? extends Person> it=al.iterator();
                         while(it.hasNext())
                         {
                                 Person p=it.next();
                                 sop(p.getName());
                         }
         }
作者: tangxiaobo1991    时间: 2014-3-21 09:56
思绪 发表于 2014-3-21 09:53
public static  void set(ArrayList al)
此处你定义的是一个泛型函数,既然传递进去的是Person,那也可以 ...

对啊,关键是我此处已经传递了person,那么T就会是person阿!
作者: 思绪    时间: 2014-3-21 10:06
tangxiaobo1991 发表于 2014-3-21 09:56
对啊,关键是我此处已经传递了person,那么T就会是person阿!

额,既然你定义的是泛型,那就代表在该方法中你使用传入进去的类型的对象所调用的方法是所有能够传进去的类型中都存在的。
如:你传入的是Integer或者Character类型的呢,它们可没有getName()方法,那要怎么办




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