作者legnaleurc (CA)
看板java
標題[問題] Generic types casting
時間Sun Jul 19 13:13:42 2009
我在實作 Observer 時
void update( Observable o, Object arg ) {
if( arg instanceof Vector<?> ) {
Vector< File > paths = (Vector< File >) arg;
}
}
然後就出現 warning
問題是我找不到除了 annotation 以外比較好看的解法
因為 Generic 的資訊在 runtime 就不存在了
(它好像不是在 JVM 上實作的...如果我對它的理解沒錯的話)
想到的一個解法是"窮人的typedef"
就是 class VectorFile extends Vector<File> {}
然後用 VectorFile 去 cast, 不過....這有點囧
請問有其他的方法可以用嗎?
題外話: 我一直覺得 Java 的 generic 用起來有點....彆扭
no offence.
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.131.25
推 zerodevil:@SuppressWarning是你的好朋友XD 07/19 14:41
→ zerodevil:generic真的很爛... 將就用吧 07/19 14:43
推 cgkm:我覺得這裡出現 warning 還算合理 要怪就怪 Observer 吧 07/20 05:39
→ legnaleurc:個人不覺得合理...如果它有在JVM上實作就不會有這種事 07/20 08:58
推 kene:但是改 JVM 勢必會降低回溯相容, 目前的寫法是經過妥協的 07/20 09:02
→ kene:這是 Java 的承諾, 也是 Java 的包袱. 07/20 09:03
→ kene:(雖然說 JVM 第三版的規格草案好像也公布了....) 07/20 09:36
→ legnaleurc:現在介面也該清理一下了吧 ... orz 07/20 10:05
→ legnaleurc:我照著你語言的規格走,結果要用annotation關掉警告= = 07/20 10:07