黑马程序员技术交流社区

标题: 关于类级别泛型中静态方法的一点疑问 [打印本页]

作者: tiandzwx    时间: 2014-7-16 16:07
标题: 关于类级别泛型中静态方法的一点疑问
各位大侠,下午好!
在学习泛型的时候,有一点小小的疑问,望有大侠帮忙解答一下!先行谢过!

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

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

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


作者: 人心如水    时间: 2014-7-16 16:18
void前面加个<E>
作者: fantacyleo    时间: 2014-7-16 16:43
老毕视频里专门讲过这个问题。类名后的参数化类型是在新建对象时接收具体类型的,静态方法不依赖于对象,当然不知道E是什么东西,必须在方法声明中明确标识参数化类型
作者: java—family    时间: 2014-7-16 16:58
pulic static <E> void update2(E obj)    2 楼说的对

作者: tiandzwx    时间: 2014-7-17 09:47
人心如水 发表于 2014-7-16 16:18
void前面加个

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

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

不管如何,谢谢了!
作者: tiandzwx    时间: 2014-7-17 09:57
java—family 发表于 2014-7-16 16:58
pulic static  void update2(E obj)    2 楼说的对

恩,这样是没错的,但是我一开始想不明白为什么:L




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