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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何堂红 中级黑马   /  2014-5-30 00:43  /  1383 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何堂红 于 2014-5-31 00:19 编辑

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

方法一中,对于,明确的类型,如String,为什么定义泛型只需要在()内声明,而对不确定的类型T,方法二中,除了小括号外还需要在static后声明?求解。

9 个回复

倒序浏览
静态方法不可以访问类中的泛型,所以要在方法上定义一个<T> .
回复 使用道具 举报
因为静态方法是先加载进内存的,static 后面加一个泛型就是防止你调用的时候不知道是什么类型。
回复 使用道具 举报
你类的泛型和静态方法的泛型名字不能一样,因为一创建对象的时候是静态方法先加载内存,所以静态方法需要有一个和类的泛型不一样的泛型名字,等谁调用这个静态方法的时候给他一个具体的类型就可以了。
回复 使用道具 举报
支持一下。。。
回复 使用道具 举报
本帖最后由 相濡、彼岸 于 2014-5-30 09:21 编辑

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

回复 使用道具 举报
顶一顶!!
回复 使用道具 举报
饥渴ing 发表于 2014-5-30 00:55
静态方法不可以访问类中的泛型,所以要在方法上定义一个 .

谢谢,不过不够详细哟
回复 使用道具 举报
shi980088 发表于 2014-5-30 07:16
你类的泛型和静态方法的泛型名字不能一样,因为一创建对象的时候是静态方法先加载内存,所以静态方法需要有 ...

嗯,谢谢,这样解释,我就清楚多了
回复 使用道具 举报
相濡、彼岸 发表于 2014-5-30 08:57
(1)方法一里面是一个具体的类型,不需要在方法中声明。
(2)方法二里面的类型不具体,需要在方法上声明 ...

嗯,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马