作者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
→ sbrhsieh:Reflection 01/07 22:43
推 brianhsu:除了 refelction 外,用多型重構你的程式碼也是一個方法 01/08 00:27
→ brianhsu:Oops,我看錯題意了。XD 01/08 00:29
推 LPH66:話說回來 C++ 好像才是多一個函式就要多維護一個 if.... 01/08 01:36
→ sbrhsieh:C++ 也可作到不需自己寫一堆 if...else... 01/08 01:50
→ rofellosx:printX再另外作一個物件? 01/08 08:53
→ adrianshum:二樓的提議是 valid 的. 這種情況應該在設計上著手 01/08 10:37
推 bala045:我想到visitor模式 不知道是不是你要的 01/08 10:39
→ weiyucsie:其實我比較好奇「C語言裡可以經由函式指標來達到」這段 01/08 20:55
推 sunneo:可以用Map< String,interface > 建好func name tbl 01/10 12:05
→ sunneo:再以tbl.get(argv[x]).print 01/10 12:08