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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柏涛 中级黑马   /  2014-2-17 16:35  /  857 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Constructor[] constructors=
               Class.forName(“java.lang.String”).getConstructors();


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

为什么前面要加个强制转换呢????

评分

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

查看全部评分

2 个回复

倒序浏览
一年_Hei 来自手机 中级黑马 2014-2-17 16:44:33
沙发
constructor类是定义了泛型类。可以在定义时指定类型。如果没指定就不能确定创造的是一个什么类型的实例。所以得强转

评分

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

查看全部评分

回复 使用道具 举报
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类型),所以必须强制类型转换。

评分

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

查看全部评分

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