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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王大斌 中级黑马   /  2013-4-21 00:03  /  1247 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王大斌 于 2013-4-22 08:52 编辑

谁给我解决下


定义了
private static  <T > T autoConvert(T a)
        {
                return a;
               
               
        }
当我使用的时候,这个T是根据我参数来决定的?

而对于下边的来说
private static  <T > T autoConvert(Object obj)
        {
                return (T)obj;
               
               
        }

当我使用
Object o = new Object();
String s = autoConvert(o);
为什么这里就是由这个定义的String去决定这个T的类型?

评分

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

查看全部评分

4 个回复

倒序浏览
泛型定义在方法中返回值的位置,那么该泛型只能在这个方法中使用,你的参数类型用到了这个T,所以是T类型的,至于后面那个,方法返回值是泛型T类型的,所有return返回一个T类型,最后那两行,代码不完整好像

评分

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

查看全部评分

回复 使用道具 举报
这是不可能的事啊。你的代码是不是给错啦。你给的代码中的autoConvert方法是私有的,如果你想调用要么在同类中,直接调用,要么在本类中提供获取该方法的公有方法,供其他类对象调用。
按照你给的代码,应该在同一个类中调用autoConvert方法,如果那样的话类型T你怎么指定?你传入Object对象,返回T类型的对象。这时不可能转换成功的,必然会抛出异常的啊!

评分

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

查看全部评分

回复 使用道具 举报
private static  <T > T autoConvert(Object obj)
        {
                return (T)obj;            
        }

你的这两个方法是有区别的。上一个是通过传入参数类型来决定返回值类型。
而你的第二个方法完全就是没有意义的。你只是重复的赘述了你的返回值类型是T。并没有把它和传入参数类型扯上任何关系。
所以即使你传入的是Object,也可以返回的是String .这不冲突。
只是你这个泛型写了跟没写都一样

评分

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

查看全部评分

回复 使用道具 举报

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