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

© 霍振鹏 中级黑马   /  2014-4-14 16:23  /  1012 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个泛型方法自动将Object类型的对象转换成其他类型,我是这么写的,报错了 ,请问应该怎么写?
public static <T> T DynamicConversion(Object  obj)
{
return (T)obj;
}

运行时报错 :int x=DynamicConversion(2.3);

111.png (40.53 KB, 下载次数: 42)

111.png

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

4 个回复

倒序浏览
public static <T> T DynamicConversion(Object  obj)
{
return (T)obj;
}

运行时报错 :int x=DynamicConversion(2.3);//这里2.3是double类型的,编译器认为T为double,你不能把赋给一个int变量,要写成int x=(int)DynamicConversion(2.3);

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
泛型的使用不是要将类型写在参数列表中吗?这样使用有意义?我怎么指定我要的类型呢?应该是要将需要的类型作为参数传入,然后获取类型,根据类型再将Object的变量强转的吧,个人拙见

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
这个方法是向下自动转型,相当于
  1. Object obj ="abc";
  2. String str = (String)obj;
复制代码
回复 使用道具 举报
回复一楼的答案,首先  int x=DynamicConversion(2.3);//这里2.3是double类型的 这里返回的不是double类型 而是一个object类型
其次此代码楼主写的不够完善你这里完全没有发挥泛型方法的作用
public static <T> T DynamicConversion(Object  obj)
{
return (T)obj;
} //我完全不知道这种写法有什么意义,甚至可以说此代码本身就是错误的
obj 强转T类型--》T是什么类型  你告诉编译器了吗?类型都不知道 如何能强转
一般泛型的是用于容器类
如 public static <T> T DynamicConversion(List<T> obj)
{
return obj.get(0);
}
如果你一定要这么写 也可以 但是请用字节码的形式传参
public static <T> T DynamicConversion(Class<T> c)
{
return c.getInstance();
}  
//最后说句,至今为止我还没发现泛型方法有什么很好的用处,基本上强制转换能够基本解决泛型方法的一般状况

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马