黑马程序员技术交流社区

标题: 反射构造方法的疑问 [打印本页]

作者: 柏涛    时间: 2014-2-17 16:35
标题: 反射构造方法的疑问
Constructor[] constructors=
               Class.forName(“java.lang.String”).getConstructors();


Constructor constructor1=
     String.class.getConstructor(StringBuffer.class);
String str = (String)constructor1.newInstance(new StringBuffer("abc"));

为什么前面要加个强制转换呢????
作者: 一年_Hei    时间: 2014-2-17 16:44
constructor类是定义了泛型类。可以在定义时指定类型。如果没指定就不能确定创造的是一个什么类型的实例。所以得强转
作者: 徐青松    时间: 2014-2-17 22:51
API中构造方法的反射类java.lang.reflect.Constructor<T>已经定义了泛型T,API文档对T的解释是:T - the class in which the constructor is declared;表示T要看在哪个类中的构造函数中被声明,即就代表这个类型,楼主的代码是constructor1.newInstance(new StringBuffer("abc")); 参数是StringBuffer类型,所以T代表的就是StringBuffer,cannot convert from StringBuffer to String(不能从StringBuffer赋值到String类型),所以必须强制类型转换。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2