作者LaPass (LaPass)
看板java
標題[問題] 轉型的問題
時間Wed Aug 17 03:10:26 2011
S是從透過網路傳輸後取得的物件 (ObjectStream還原後得到的)
固定為十幾種已知型別
用途是負責擔任Client跟Server間的溝通
而且型別種類還在繼續增加當中
我現在想讓程式依照不同物件做出對應動作
遇到這種狀況
很自然的想到以前用的花招.....
但是這種功能被java沒收了
/*前略 */
public static void test(
test01 a) {
System.out.println("收到test01,執行相對應動作");
}
public static void test(
test02 b) {
System.out.println("收到test02,執行相對應動作");
}
public static void test(
test03 c) {
System.out.println("收到test02,執行相對應動作");
}
/*中略*/
Object S;
while(true) {
if ((S == SL.GetNext()) != null) {
System.out.println("沒有取得值 T口T");
else {
ServerTest.test(S); //這招在JAVA中失效.. 編譯器叫我轉型..
}
}
/*後略*/
我想請問....
在JAVA中有比較簡潔、容易維護的寫法嗎?
雖然還是有辦法解決
可是下面幾種解決方式,用起來比較不是這麼方便、易增、刪、改
if (... instanceof ...) {
...
} else (... instanceof ...){
...
}
Map<Class,ObjectOfDoingSomeThing>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.140.91.33
※ 編輯: LaPass 來自: 220.140.91.33 (08/17 03:11)
推 lachtchlee:用generic type 08/17 07:58
→ tkcn:在 Server 開一個 Map<Class, Handler> 08/17 10:01
→ tkcn:唔唔..原來原文提過Map了,可以考慮再加上 Reflection,但... 08/17 10:03
→ mars90226:看到這個直覺想到多型耶... 08/17 10:23
→ meconin:聽起來像是 Factory Pattern? 08/17 13:23
→ meconin:design patterns 找找看吧 08/17 13:25
推 lachtchlee:不關設計模式 interface oriented 而已 一樓已解完成了 08/17 13:50
推 lachtchlee:本人傾向不看繁體Java 簡體人曰 面向接口 08/17 14:03
→ james732:太好了,我還擔心自己的寫法不好 XDD 08/17 14:18
→ meconin:公用 靜態 無效 主要 (字串 「」 甲 )『』 08/17 14:42
推 lachtchlee:你中暑了是嗎 08/17 14:48
→ mars90226:樓上上還頗好笑的 不過為什麼是甲? 08/17 22:14
→ LaPass:Reflection啊.... thx 我研究看看怎麼用 08/18 12:46
→ LaPass:Reflection感覺起來還是好麻煩啊 orz.... 08/18 21:47
→ sbrhsieh:為甚麼不採用一樓的做法?!(這算是最簡單的) 08/22 00:27