看板 java 關於我們 聯絡資訊
※ 引述《ciphero (奶油焗蛋餃...:))》之銘言: : 搜尋過之前的文章了,都沒有關於函式指標的議題 : 所以只好上來發問... : 想像以下程式碼: : 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() : } : } Java 的原始語法裡,沒有函式指標的概念 但如果有這樣的需求時,可以透過一些 pattern 來達到近似的效果 這時,你可以多宣告一個 class,達到類似的功效 (輔以使用 anonymous class,可以讓語法更簡潔) public interface PrintMethod { public abstract void invoke(); } public class ABC { public static PrintMethod printA = new PrintMethod() { public void invoke() { System.out.println("這是 printA()."); } }; public static PrintMethod printB = new PrintMethod() { public void invoke() { System.out.println("這是 printB()."); } }; public static PrintMethod printC = new PrintMethod() { public void invoke() { System.out.println("這是 printC()."); } }; }; Class Main { public static void main(int argc, String[] argv) { PrintMethod fp; // 類似宣告 void (*fp)(void); if (argv[0].equals("printA")) fp = ABC.printA; // 類似 fp = ABC::printA; else if (argv[0].equals("printB")) fp = ABC.printB; // 類似 fp = ABC::printB; else if (argv[0].equals("printC")) fp = ABC.printC; // 類似 fp = ABC::printC; fp.invoke(); // 類似呼叫 (*fp)(); } } 重點在於,多弄一個 method class 把原本的 method body 物件化 甚至不需要動用到 reflection 這樣,就可以很輕易地做到類似 function pointer 的功能 甚至是 member function pointer 都做得到 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.129.52 ※ 編輯: mgtsai 來自: 60.250.129.52 (01/08 16:52)
PsMonkey:==.==== 這真的有解決原 po 的問題嗎? 01/08 16:53
petertc:這有解決原po的問題嗎?i.e., 不動到dispatcher新增功能 01/08 16:54
petertc:慢一步xd 01/08 17:06
PsMonkey:\囧/ [扭扭] 01/08 17:12