首先
Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
这句话就不准确
String.class.getConstructor(StringBuffer.class);
没错确实根据泛型返回一个Constructor<String>
但是你定义这个应用类型的变量的时候
Constructor constructor1没有指定它应该是哪种类型
这就比如我又一个父类Person 而有一个子类Student
Person p = new Student();
没错,是返回一个子类Student对象,
但是Person对于编译器来说知道是Student吗?
不知道,它仅仅知道是一个Person p 。
而在运行的时候去由动态机制动态读取。
Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
也就是必须要告诉编译器,我的Constructor constructor1就是存储的一个Constructor<String>。
也就是
Constructor<String> constructor1 = String.class.getConstructor(StringBuffer.class);
这样你就告诉了编译器,我的Constructor是String类的一个构造函数,这样下边编译器就知道了,就不用你强转了
String str2 =constructor1.newInstance(new StringBuffer("abc"));
System.out.println(str2.charAt(2));
|