看板 java 關於我們 聯絡資訊
在 Class ItemEvent 裡 http://download.oracle.com/javase/6/docs/api/java/awt/event/ItemEvent.html 有一個 method 是 Object getItem() 他的說明是 Returns the item affected by the event. 看起來回傳值是 Object 可是我在實做 ItemListener 時,寫了下面這段程式: public void itemStateChanged(ItemEvent e) { System.out.println(e.getItem().getClass()); } 跑出來竟然是 class java.lang.String !! 也因此我不能用 getItem() 取得是誰觸發了事件… 是 java 的說明文件寫錯了嗎? 不過有另一個繼承自 java.util.EventObject 的 method Object getSource() 把剛剛的程式改成用這個 method 的話 會出現 class java.awt.Checkbox 雖然觸發事件的確實是 Checkbox,可是回傳的物件不是應該是 Object 嗎…? -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.128.39
LPH66:A String "IS-A"(n) Object 這個"IS-A"關係你該不會忘了吧? 02/18 03:22
LPH66:話說回來 getSource 哪知道你的來源可能會是什麼物件 02/18 03:24
kanandg1:getClass會傳回runtime(concrete)的class 02/18 03:24
LPH66:所以只好寫個 Object 在上面 實際傳什麼回來是執行期的事 02/18 03:25
LPH66:然後就如3F說的 getClass 會告訴你執行期時它實際上是什麼 02/18 03:27
kanandg1:綠色的那段程式碼中寫的是getItem? 02/18 03:27
喔對…改掉了
a1234957:............... 02/18 07:36
TonyQ:等等 getItem 跟 getsource 有什麼關係 -_-??? 02/18 08:17
而且用 getClass() 看明明是 Checkbox 卻不能寫 e.getSource().getLable() 一定要先轉型-> ( (Checkbox)e.getSource() ).getLable() 雖然 e.getSource() 不能知道來源是什麼物件 可是 getClass() 卻能知道,這裡我覺得還蠻怪的… ※ 編輯: darkgerm 來自: 124.8.139.231 (02/18 10:06)
a1234957:JAVA的物件導向你應該要再好好研究 02/18 11:21
a1234957:物件繼承,和物件處於runtime時期的狀況 02/18 11:28
fanzero:樓上說的真對 02/27 12:42