作者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)
2F:推 lachtchlee:用generic type 08/17 07:58
3F:→ tkcn:在 Server 开一个 Map<Class, Handler> 08/17 10:01
4F:→ tkcn:唔唔..原来原文提过Map了,可以考虑再加上 Reflection,但... 08/17 10:03
5F:→ mars90226:看到这个直觉想到多型耶... 08/17 10:23
6F:→ meconin:听起来像是 Factory Pattern? 08/17 13:23
7F:→ meconin:design patterns 找找看吧 08/17 13:25
8F:推 lachtchlee:不关设计模式 interface oriented 而已 一楼已解完成了 08/17 13:50
10F:推 lachtchlee:本人倾向不看繁体Java 简体人曰 面向接口 08/17 14:03
11F:→ james732:太好了,我还担心自己的写法不好 XDD 08/17 14:18
12F:→ meconin:公用 静态 无效 主要 (字串 「」 甲 )『』 08/17 14:42
13F:推 lachtchlee:你中暑了是吗 08/17 14:48
14F:→ mars90226:楼上上还颇好笑的 不过为什麽是甲? 08/17 22:14
15F:→ LaPass:Reflection啊.... thx 我研究看看怎麽用 08/18 12:46
16F:→ LaPass:Reflection感觉起来还是好麻烦啊 orz.... 08/18 21:47
17F:→ sbrhsieh:为甚麽不采用一楼的做法?!(这算是最简单的) 08/22 00:27