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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hdsjsql 中级黑马   /  2013-4-22 21:26  /  2816 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法为什么能被定义为泛型?
静态方法是随类的加载而加载的,
泛型方法要直到被调用时才能确认要操作的参数类型,
这时将静态方法定义为泛型,岂不是要直到被调用时才能确认参数的数据类型,实在不懂,求解.


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
具体的可以去百度上搜搜,内容我就不复制了
回复 使用道具 举报
加载和执行一样吗??
public static void ff(Object o)
        {
                System.out.println(o);
               
        }
在这个静态方法加载的时候就知道了o的类型?

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


泛型类在创建的时候知道其泛型的类型。
而静态方法在调用的时候才动态指定

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
静态方法是属于类的,而类的调用,必须要创建对象来调用,但是静态方法是不属于对象的。
所以如果类中定义了静态方法的时候,类的泛型是不能作用在静态方法上的。静态方法必须自己定义泛型。
静态方法的泛型是调用的时候才明确的。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报

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









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


评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
静态方法为什么能被定义为泛型?
这个问题我想,应该分两种情况,
第一种,你知道是什么类或者对象调用该方法,所以先指定调用该方法的类型,当然静态方法的泛型传入的变量不能和类一致,因为静态方法比类先加载。
第二种,不知道是是什么类或者对象调用该方法,所以你不指定调用该方法的类型,只传入泛型的变量,等调用时知道了类或者对象的类型,就传入类型,避免重复写代码。
其它的也不知道你要问什么。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孟群峰 于 2013-4-25 11:31 编辑

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

泛型的静态方法在编译期就已经确定了参数类型,所以在运行的时候,参数就已经知道了,而不用管静态方法的加载顺序。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-25 23:43:02
8#


如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马