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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tiandzwx 中级黑马   /  2014-7-16 16:07  /  1029 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大侠,下午好!
在学习泛型的时候,有一点小小的疑问,望有大侠帮忙解答一下!先行谢过!

定义的带泛型的类如下:
public class GenericDao <E>{               
        /*
        public static void update2(E obj)
        {
                //Eclipse会报错!      
        }
        */
        public static <T> void update2(T obj)
        {
                //Eclipse编译通过      
        }
}

两个静态方法,一个使用的是跟类一样的泛型,会报错!
另一个使用独立的泛型,却可以顺利通过!

百思不得其解,还望某位大神解释解释!

6 个回复

倒序浏览
void前面加个<E>
回复 使用道具 举报
老毕视频里专门讲过这个问题。类名后的参数化类型是在新建对象时接收具体类型的,静态方法不依赖于对象,当然不知道E是什么东西,必须在方法声明中明确标识参数化类型
回复 使用道具 举报 1 0
pulic static <E> void update2(E obj)    2 楼说的对
回复 使用道具 举报

你这样就是我说的第二种不报错的方法了,,,独立的泛型就不会报错
回复 使用道具 举报
fantacyleo 发表于 2014-7-16 16:43
老毕视频里专门讲过这个问题。类名后的参数化类型是在新建对象时接收具体类型的,静态方法不依赖于对象,当 ...

后面我自己又想了一下,应该是这样,静态方法的泛型参数如果跟类的参数挂钩,那样,不建立类的实例对象就不知道具体的泛型参数是什么,这样的话,静态方法无法用类名直接调用,因此会报错;而独立的泛型参数,就可以调用静态方法的时候再具体设置,不需要通过建立类的实例对象来确定泛型参数,这样就不会报错;

不管如何,谢谢了!
回复 使用道具 举报
java—family 发表于 2014-7-16 16:58
pulic static  void update2(E obj)    2 楼说的对

恩,这样是没错的,但是我一开始想不明白为什么:L
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马