课程
/后端开发
/Java
/反射——Java高级开发必须懂的
为什么啊
2014-11-26
源自:反射——Java高级开发必须懂的 1-1
正在回答
肯定不能这么用
Foo foo = new Foo();
Class<?> c = foo.getClass();
foo = c.instance();
这么用就死循环了,而且一点意义就没有。
这些只是举个例子,可以得到一个对象的Class对象,也可以从一个Class对象转换成一个具体对象。
(thinking in java 4th p319)newInstance是实现虚拟 构造器的一种方法,(虚拟构造器:允许你不知道确切类型,但是你必须要正确的创造自己)而c1,c2,c3仅仅只是Class类的引用,编译器不具备任何更多信息,只有在创建新实例的时候会得到Object引用(注意 是Object引用),你要想用这个引用那你必须要向下转型啦,就是这里的强制类型转换。。
转型是为了得到更准确的信息。
例如人是动物,狗也是动物。 但是你要表示人的话,你还是要把动物转成人。
我觉得可以这样理解,你说newInstance到底返回什么才能让所有的类都可以这样去实例化呢?那就需要所有类的父类对不对,那个所有类的父类就是Object,所以返回回来的是Object,那么这样的话就需要转换类型了,而你说的如果设计的人本身就不知道你有Foo这个类,所以他当然不会返回Foo这个类型。
c1.newInstance()这个方法的返回值是Object类型,所以需要进行强制类型转换。
c1的类型是Class,你在仔细看看视频
举报
反射,Java高级开发必须要懂的知识点,学好Java高级课程的基础
3 回答Foo foo = (Foo)c1.newInstance()这个例子
2 回答反射那一课里,c1.newInstance()为什么要强制类型转化为Foo?
3 回答为什么c1 or c2 or c3不是要实例两下才能得到Foo类的对象?
1 回答c2已经是通过Foo类的实例对象创建的,那么用c2再创建Foo的实例有什么意义?
1 回答为什么使用newInstantce()创建新对象时,需要强制类型转换?