帅D一B
2014-11-26 11:29
为什么啊
肯定不能这么用
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高级开发必须懂的
151467 学习 · 335 问题
相似问题