黑马程序员技术交流社区

标题: 泛型 [打印本页]

作者: 何堂红    时间: 2014-5-30 00:43
标题: 泛型
本帖最后由 何堂红 于 2014-5-31 00:19 编辑

先看这两方法的定义:
方法一:public static void method(ArrayList<String>  al){}
方法二:public static <T> void method ( ArrayList<T> al) {}

方法一中,对于,明确的类型,如String,为什么定义泛型只需要在()内声明,而对不确定的类型T,方法二中,除了小括号外还需要在static后声明?求解。
作者: 饥渴ing    时间: 2014-5-30 00:55
静态方法不可以访问类中的泛型,所以要在方法上定义一个<T> .
作者: shi980088    时间: 2014-5-30 07:08
因为静态方法是先加载进内存的,static 后面加一个泛型就是防止你调用的时候不知道是什么类型。
作者: shi980088    时间: 2014-5-30 07:16
你类的泛型和静态方法的泛型名字不能一样,因为一创建对象的时候是静态方法先加载内存,所以静态方法需要有一个和类的泛型不一样的泛型名字,等谁调用这个静态方法的时候给他一个具体的类型就可以了。
作者: jsjchenlong    时间: 2014-5-30 08:33
支持一下。。。
作者: 相濡、彼岸    时间: 2014-5-30 08:57
本帖最后由 相濡、彼岸 于 2014-5-30 09:21 编辑

(1)方法一里面是一个具体的类型,不需要在方法中声明。
(2)方法二里面的<T>类型不具体,需要在方法上声明,因为静态不能访问类上定义的泛型,泛型类定义以后,作用于整个类,当对象类型明确了类型后,方法
上要操作的类型就已经固定了,但是静态优先于对象,所以访问不到,所以方法上要声明<T>加以区分!


作者: 凝霜的枯藤    时间: 2014-5-30 09:20
顶一顶!!
作者: 何堂红    时间: 2014-5-31 00:15
饥渴ing 发表于 2014-5-30 00:55
静态方法不可以访问类中的泛型,所以要在方法上定义一个 .

谢谢,不过不够详细哟
作者: 何堂红    时间: 2014-5-31 00:17
shi980088 发表于 2014-5-30 07:16
你类的泛型和静态方法的泛型名字不能一样,因为一创建对象的时候是静态方法先加载内存,所以静态方法需要有 ...

嗯,谢谢,这样解释,我就清楚多了
作者: 何堂红    时间: 2014-5-31 00:18
相濡、彼岸 发表于 2014-5-30 08:57
(1)方法一里面是一个具体的类型,不需要在方法中声明。
(2)方法二里面的类型不具体,需要在方法上声明 ...

嗯,谢谢




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