第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問為什么從ArrayList集合中取出來的對象不能直接調(diào)用它的屬性?

Course?cr1?=new?Course("1","1函數(shù)");
		coursesToSelect.add(cr1);
		//這樣是可以的
		Course?s=?(Course)coursesToSelect.get(0);
		System.out.println(s.name);
		//這樣是不行的,為什么?
		System.out.println(coursesToSelect.get(0).name);
		


正在回答

2 回答

因為往集合里面添加或者取出類型的時候,無論之前是什么類型,都會變成Object類型,所以取出的時候也是Object類型,課程的名字是Course類型的,所以我們要把Object類型強轉(zhuǎn)為Course類型,才能取得課程的名稱

1 回復 有任何疑惑可以回復我~
#1

風蕭瑟 提問者

System.out.println((Course)coursesToSelect.get(0).name); 那這樣算不算強轉(zhuǎn)為了Course類型?
2015-12-26 回復 有任何疑惑可以回復我~
#2

風蕭瑟 提問者

非常感謝!
2016-01-07 回復 有任何疑惑可以回復我~

在文本編輯的時候是不能判斷出類型轉(zhuǎn)換是否能真正的轉(zhuǎn)換成功,只能說明這個語法沒有什么問題,是通過某些文件完成的靜態(tài)分析。如果轉(zhuǎn)換不成功,最終會報錯。
//這樣是可以的
??????? Course s= (Course)coursesToSelect.get(0);
??????? System.out.println(s.name);
因為類型轉(zhuǎn)換已經(jīng)從語法上通過了,s被認為是Course類對象,不管他實際上是不是,因為你聲明s為Course類對象,如果強制轉(zhuǎn)換錯誤,右邊的才是原罪,s本身是沒有錯的。Course類對象可以調(diào)用name域。
比如:????????? ListTest lt=new ListTest();
??????????????? Object obj=new Object();
?? ??? ?lt=(ListTest)obj;
語法上沒有問題,但是運行時會報錯。

//這樣是不行的,為什么?
??????? System.out.println((Course)coursesToSelect.get(0).name);
我覺得有2種可能,我自己也不太明白:要么是因為靜態(tài)分析是靠某些文件完成的,可能完成不了這種分析,畢竟這里的"."那么多,到底cast誰,要么是承認你的語法沒有問題,但是不真正認為這個強制轉(zhuǎn)換是成功的,不把(Courses)coursesToSelect.get(0)作為Course類對象,因此不允許調(diào)用name。前面成功是因為你是先聲明了一個Course類對象變量s,注意,是聲明了,所以可以調(diào)用name,至于成功與否,還要根據(jù)運行時,s是不是真的是一個Course類對象變量。


0 回復 有任何疑惑可以回復我~
#1

七九九

//這樣是不行的,為什么? System.out.println((Course)coursesToSelect.get(0).name); 真正原因:運算優(yōu)先的問題,先將coursesToSelect.get(0)作為Object類對象,嘗試調(diào)用name不成功,強制轉(zhuǎn)換的優(yōu)先級靠后了。理由如下: System.out.println(((Course)coursesToSelect.get(0)).name); 這個寫法就可以了,加個括號改變優(yōu)先級。
2016-02-27 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問為什么從ArrayList集合中取出來的對象不能直接調(diào)用它的屬性?

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號