作者ciphero (奶油焗蛋饺...:))
看板java
标题[问题] 有没有可能做到类似函式指标的功能?
时间Thu Jan 7 22:42:17 2010
搜寻过之前的文章了,都没有关於函式指标的议题
所以只好上来发问...
想像以下程式码:
Class ABC {
public printA() {
System.out.println("这是 printA().");
}
public printB() {
System.out.println("这是 printB().");
}
public printC() {
System.out.println("这是 printC().");
}
}
Class Main {
public static void main() {
ABC abc = new ABC();
if(argv[0]=="printA") abc.printA(); // 若参数为printA,则呼叫printA()
else if(argv[0]=="printB") abc.printB(); // 若参数为printB,则呼叫printB()
else if(argv[0]=="printC") abc.printC(); // 若参数为printC,则呼叫printC()
}
}
以上是一段简单易懂的程式码,想要呼叫什麽 Method,就输入那个方法当作参数就好
但是缺点是相当难以维护,
只要我新增了一个 printD() 方法,也就必须要在 main() 里面加上:
else if(argv[0]=="printD") abc.printD();
这一段 code 才行,相当不方便
理想的程式,应该是新增了任何 printX() 之後,在 main() 里面并不需要另外做修改
这个目标,在 C 语言里可以经由函式指标来达到,但是 JAVA 没有办法这麽做
不知道是否有其他的解法?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.117.64.225
1F:→ sbrhsieh:Reflection 01/07 22:43
2F:推 brianhsu:除了 refelction 外,用多型重构你的程式码也是一个方法 01/08 00:27
3F:→ brianhsu:Oops,我看错题意了。XD 01/08 00:29
4F:推 LPH66:话说回来 C++ 好像才是多一个函式就要多维护一个 if.... 01/08 01:36
5F:→ sbrhsieh:C++ 也可作到不需自己写一堆 if...else... 01/08 01:50
6F:→ rofellosx:printX再另外作一个物件? 01/08 08:53
7F:→ adrianshum:二楼的提议是 valid 的. 这种情况应该在设计上着手 01/08 10:37
8F:推 bala045:我想到visitor模式 不知道是不是你要的 01/08 10:39
9F:→ weiyucsie:其实我比较好奇「C语言里可以经由函式指标来达到」这段 01/08 20:55
10F:推 sunneo:可以用Map< String,interface > 建好func name tbl 01/10 12:05
11F:→ sunneo:再以tbl.get(argv[x]).print 01/10 12:08