看板 java 關於我們 聯絡資訊
搜尋過之前的文章了,都沒有關於函式指標的議題 所以只好上來發問... 想像以下程式碼: 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