黑马程序员技术交流社区

标题: 静态方法泛型的问题 [打印本页]

作者: hdsjsql    时间: 2013-4-22 21:26
标题: 静态方法泛型的问题
静态方法为什么能被定义为泛型?
静态方法是随类的加载而加载的,
泛型方法要直到被调用时才能确认要操作的参数类型,
这时将静态方法定义为泛型,岂不是要直到被调用时才能确认参数的数据类型,实在不懂,求解.



作者: 陈湘林    时间: 2013-4-22 22:26
具体的可以去百度上搜搜,内容我就不复制了
作者: 王大斌    时间: 2013-4-24 23:53
加载和执行一样吗??
public static void ff(Object o)
        {
                System.out.println(o);
               
        }
在这个静态方法加载的时候就知道了o的类型?

ff(new String());
ff(new Integer());
你能说加载的时候就知道参数类型?


泛型类在创建的时候知道其泛型的类型。
而静态方法在调用的时候才动态指定
作者: 晓风妮子    时间: 2013-4-25 00:45
静态方法是属于类的,而类的调用,必须要创建对象来调用,但是静态方法是不属于对象的。
所以如果类中定义了静态方法的时候,类的泛型是不能作用在静态方法上的。静态方法必须自己定义泛型。
静态方法的泛型是调用的时候才明确的。

作者: 袁梦希    时间: 2013-4-25 08:50

其实泛型只是针对于"编译时期"的一个代码的规范,当在运行时期已经被去掉了,
我们可以利用反射,插入一个与泛型中对象的类型不一致的对象。{:soso_e182:}









版主拎包郑重提示:    {:soso_e113:} 如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记成“已解决”。就OK了



作者: 陈雨    时间: 2013-4-25 10:58
静态方法为什么能被定义为泛型?
这个问题我想,应该分两种情况,
第一种,你知道是什么类或者对象调用该方法,所以先指定调用该方法的类型,当然静态方法的泛型传入的变量不能和类一致,因为静态方法比类先加载。
第二种,不知道是是什么类或者对象调用该方法,所以你不指定调用该方法的类型,只传入泛型的变量,等调用时知道了类或者对象的类型,就传入类型,避免重复写代码。
其它的也不知道你要问什么。
作者: 孟群峰    时间: 2013-4-25 11:28
本帖最后由 孟群峰 于 2013-4-25 11:31 编辑

楼主说的调用,应该指的是参数化的静态方法执行的时候,而不是楼主认为的直接执行,不去经过编译期编译。所以楼主一定要把程序从编译到运行的过程搞清楚,这样才能深入理解泛型。
程序执行的时候并不是你的代码写出来的样子,而是经过编译过后的样子。

泛型的静态方法在编译期就已经确定了参数类型,所以在运行的时候,参数就已经知道了,而不用管静态方法的加载顺序。
作者: 黄玉昆    时间: 2013-4-25 23:43


如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢




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