作者darkgerm (黑駿)
看板java
標題[問題] JAVA 說明文件寫錯了?
時間Fri Feb 18 01:38:34 2011
在 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
1F:推 LPH66:A String "IS-A"(n) Object 這個"IS-A"關係你該不會忘了吧? 02/18 03:22
2F:→ LPH66:話說回來 getSource 哪知道你的來源可能會是什麼物件 02/18 03:24
3F:→ kanandg1:getClass會傳回runtime(concrete)的class 02/18 03:24
4F:推 LPH66:所以只好寫個 Object 在上面 實際傳什麼回來是執行期的事 02/18 03:25
5F:→ LPH66:然後就如3F說的 getClass 會告訴你執行期時它實際上是什麼 02/18 03:27
6F:→ kanandg1:綠色的那段程式碼中寫的是getItem? 02/18 03:27
喔對…改掉了
7F:→ a1234957:............... 02/18 07:36
8F:推 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)
9F:推 a1234957:JAVA的物件導向你應該要再好好研究 02/18 11:21
10F:推 a1234957:物件繼承,和物件處於runtime時期的狀況 02/18 11:28
11F:推 fanzero:樓上說的真對 02/27 12:42