黑马程序员技术交流社区
标题:
反射的一个问题
[打印本页]
作者:
fso918
时间:
2011-10-13 14:28
标题:
反射的一个问题
对象的强制类型转换,是知道对象的具体类型,然后强行转换为具体类型的对象。
那我们用反射得到对象的具体类型后,能不能用这个类型进行强制类型转换呢?
这样,我们的方法就可以返回具体类型,而不用返回Object了,这不更好吗?
代码:
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
public class RefReturn {
public static void main(String[] args) throws Exception {
Collection<String> coll = new ArrayList<String>();
System.out.println(getElementFromCollection(coll));
}
public static Object getElementFromCollection(Collection<String> collection) throws Exception{
Method m = RefReturn.class.getMethod("getElementFromCollection", Collection.class);
Type[] types = m.getGenericParameterTypes();
ParameterizedType pt = (ParameterizedType)types[0];
Type[] pts = pt.getActualTypeArguments();
//标记1
String s = pts[0].toString().substring(6);
//标记2
Object obj = Class.forName(s).newInstance();
List l = Arrays.asList(pts);
return obj.getClass().getName();
}
}
复制代码
在标记 1 处获得具体类型后,
在标记 2 处能否强制转换为pts[0]的类型,而不用Object
好像没说清楚。。。。
作者:
梁锡伟
时间:
2011-10-13 18:35
你的代码能不能运行的?ParameterizedType这个类我还真是第一次见到,学习了
作者:
贾双涛
时间:
2011-10-13 21:21
楼主的意思是不是pts[0]表示的是某种类型,我们获得了这个类型的名字,Class.forName(s).newInstance()
用这种类型又创建了对象,我们既然已经获得了这种类型,可不可以用这种类型来对Class.forName(s).newInstance()获得的对象进行强制类型转换?
我觉得虽然我们获得了这个类型,但是你怎么表示呀,没法表示,总不能用pts[0]来表示这种类型吧,好像没有这种表示方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2