[問題] 有沒有可能做到類似函式指標的功能?

看板java作者 (奶油焗蛋餃...:))時間14年前 (2010/01/07 22:42), 編輯推噓4(407)
留言11則, 8人參與, 最新討論串1/8 (看更多)
搜尋過之前的文章了,都沒有關於函式指標的議題 所以只好上來發問... 想像以下程式碼: 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

01/07 22:43, , 1F
Reflection
01/07 22:43, 1F

01/08 00:27, , 2F
除了 refelction 外,用多型重構你的程式碼也是一個方法
01/08 00:27, 2F

01/08 00:29, , 3F
Oops,我看錯題意了。XD
01/08 00:29, 3F

01/08 01:36, , 4F
話說回來 C++ 好像才是多一個函式就要多維護一個 if....
01/08 01:36, 4F

01/08 01:50, , 5F
C++ 也可作到不需自己寫一堆 if...else...
01/08 01:50, 5F

01/08 08:53, , 6F
printX再另外作一個物件?
01/08 08:53, 6F

01/08 10:37, , 7F
二樓的提議是 valid 的. 這種情況應該在設計上著手
01/08 10:37, 7F

01/08 10:39, , 8F
我想到visitor模式 不知道是不是你要的
01/08 10:39, 8F

01/08 20:55, , 9F
其實我比較好奇「C語言裡可以經由函式指標來達到」這段
01/08 20:55, 9F

01/10 12:05, , 10F
可以用Map< String,interface > 建好func name tbl
01/10 12:05, 10F

01/10 12:08, , 11F
再以tbl.get(argv[x]).print
01/10 12:08, 11F
文章代碼(AID): #1BHVBCUE (java)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 8 篇):
文章代碼(AID): #1BHVBCUE (java)