課程
/后端開發(fā)
/Java
/反射——Java高級開發(fā)必須懂的
為什么啊
2014-11-26
源自:反射——Java高級開發(fā)必須懂的 1-1
正在回答
肯定不能這么用
Foo foo = new Foo();
Class<?> c = foo.getClass();
foo = c.instance();
這么用就死循環(huán)了,而且一點(diǎn)意義就沒有。
這些只是舉個(gè)例子,可以得到一個(gè)對象的Class對象,也可以從一個(gè)Class對象轉(zhuǎn)換成一個(gè)具體對象。
(thinking?in?java 4th?p319)newInstance是實(shí)現(xiàn)虛擬?構(gòu)造器的一種方法,(虛擬構(gòu)造器:允許你不知道確切類型,但是你必須要正確的創(chuàng)造自己)而c1,c2,c3僅僅只是Class類的引用,編譯器不具備任何更多信息,只有在創(chuàng)建新實(shí)例的時(shí)候會(huì)得到Object引用(注意?是Object引用),你要想用這個(gè)引用那你必須要向下轉(zhuǎn)型啦,就是這里的強(qiáng)制類型轉(zhuǎn)換。。
轉(zhuǎn)型是為了得到更準(zhǔn)確的信息。
例如人是動(dòng)物,狗也是動(dòng)物。 但是你要表示人的話,你還是要把動(dòng)物轉(zhuǎn)成人。
我覺得可以這樣理解,你說newInstance到底返回什么才能讓所有的類都可以這樣去實(shí)例化呢?那就需要所有類的父類對不對,那個(gè)所有類的父類就是Object,所以返回回來的是Object,那么這樣的話就需要轉(zhuǎn)換類型了,而你說的如果設(shè)計(jì)的人本身就不知道你有Foo這個(gè)類,所以他當(dāng)然不會(huì)返回Foo這個(gè)類型。
c1.newInstance()這個(gè)方法的返回值是Object類型,所以需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
c1的類型是Class,你在仔細(xì)看看視頻
舉報(bào)
反射,Java高級開發(fā)必須要懂的知識(shí)點(diǎn),學(xué)好Java高級課程的基礎(chǔ)
3 回答Foo foo = (Foo)c1.newInstance()這個(gè)例子
2 回答反射那一課里,c1.newInstance()為什么要強(qiáng)制類型轉(zhuǎn)化為Foo?
3 回答為什么c1 or c2 or c3不是要實(shí)例兩下才能得到Foo類的對象?
1 回答c2已經(jīng)是通過Foo類的實(shí)例對象創(chuàng)建的,那么用c2再創(chuàng)建Foo的實(shí)例有什么意義?
1 回答為什么使用newInstantce()創(chuàng)建新對象時(shí),需要強(qiáng)制類型轉(zhuǎn)換?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-07-30
肯定不能這么用
Foo foo = new Foo();
Class<?> c = foo.getClass();
foo = c.instance();
這么用就死循環(huán)了,而且一點(diǎn)意義就沒有。
這些只是舉個(gè)例子,可以得到一個(gè)對象的Class對象,也可以從一個(gè)Class對象轉(zhuǎn)換成一個(gè)具體對象。
2015-05-05
(thinking?in?java 4th?p319)newInstance是實(shí)現(xiàn)虛擬?構(gòu)造器的一種方法,(虛擬構(gòu)造器:允許你不知道確切類型,但是你必須要正確的創(chuàng)造自己)而c1,c2,c3僅僅只是Class類的引用,編譯器不具備任何更多信息,只有在創(chuàng)建新實(shí)例的時(shí)候會(huì)得到Object引用(注意?是Object引用),你要想用這個(gè)引用那你必須要向下轉(zhuǎn)型啦,就是這里的強(qiáng)制類型轉(zhuǎn)換。。
2015-01-25
轉(zhuǎn)型是為了得到更準(zhǔn)確的信息。
例如人是動(dòng)物,狗也是動(dòng)物。 但是你要表示人的話,你還是要把動(dòng)物轉(zhuǎn)成人。
2014-12-07
我覺得可以這樣理解,你說newInstance到底返回什么才能讓所有的類都可以這樣去實(shí)例化呢?那就需要所有類的父類對不對,那個(gè)所有類的父類就是Object,所以返回回來的是Object,那么這樣的話就需要轉(zhuǎn)換類型了,而你說的如果設(shè)計(jì)的人本身就不知道你有Foo這個(gè)類,所以他當(dāng)然不會(huì)返回Foo這個(gè)類型。
2014-11-26
c1.newInstance()這個(gè)方法的返回值是Object類型,所以需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
2014-11-26
c1的類型是Class,你在仔細(xì)看看視頻