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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fso918 黑马帝   /  2011-10-13 14:28  /  2647 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对象的强制类型转换,是知道对象的具体类型,然后强行转换为具体类型的对象。
那我们用反射得到对象的具体类型后,能不能用这个类型进行强制类型转换呢?
这样,我们的方法就可以返回具体类型,而不用返回Object了,这不更好吗?
代码:
  1. import java.lang.reflect.Method;
  2. import java.lang.reflect.ParameterizedType;
  3. import java.lang.reflect.Type;
  4. import java.util.*;
  5. public class RefReturn {
  6.         public static void main(String[] args) throws Exception {
  7.                 Collection<String> coll = new ArrayList<String>();
  8.                 System.out.println(getElementFromCollection(coll));
  9.         }

  10.         public static Object getElementFromCollection(Collection<String> collection) throws Exception{
  11.                
  12.                 Method m = RefReturn.class.getMethod("getElementFromCollection", Collection.class);
  13.                 Type[] types = m.getGenericParameterTypes();
  14.                 ParameterizedType pt = (ParameterizedType)types[0];
  15.                 Type[] pts = pt.getActualTypeArguments();
  16.                                 //标记1
  17.                 String s = pts[0].toString().substring(6);
  18.                                 //标记2
  19.                 Object obj =  Class.forName(s).newInstance();
  20.                
  21.                 List l = Arrays.asList(pts);
  22.                
  23.                 return obj.getClass().getName();
  24.         }
  25. }
复制代码
在标记 1 处获得具体类型后,
在标记 2 处能否强制转换为pts[0]的类型,而不用Object

好像没说清楚。。。。

评分

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

查看全部评分

3 个回复

倒序浏览
你的代码能不能运行的?ParameterizedType这个类我还真是第一次见到,学习了
回复 使用道具 举报
楼主我试了一下,System.out.println(pts[0].getClass().getName());
输出:java.lang.Class,说明pts[0]为Class类型
System.out.println(Class.forName(s).newInstance().getClass().getName());
输出:java.lang.String ,说明Class.forName(s).newInstance()生成String类型一个实例,
如果按照你说的:Class obj =(Class) (Class.forName(s).newInstance());强制转换
return obj.getClass().getName();
则报错:Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Class
String类型无法强制转换为Class类型

评分

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

查看全部评分

回复 使用道具 举报
楼主的意思是不是pts[0]表示的是某种类型,我们获得了这个类型的名字,Class.forName(s).newInstance()
用这种类型又创建了对象,我们既然已经获得了这种类型,可不可以用这种类型来对Class.forName(s).newInstance()获得的对象进行强制类型转换?
我觉得虽然我们获得了这个类型,但是你怎么表示呀,没法表示,总不能用pts[0]来表示这种类型吧,好像没有这种表示方法。

评分

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

查看全部评分

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