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

看板java作者時間16年前 (2010/01/08 16:42), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/8 (看更多)
※ 引述《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)

01/08 16:53, , 1F
==.==== 這真的有解決原 po 的問題嗎?
01/08 16:53, 1F

01/08 16:54, , 2F
這有解決原po的問題嗎?i.e., 不動到dispatcher新增功能
01/08 16:54, 2F

01/08 17:06, , 3F
慢一步xd
01/08 17:06, 3F

01/08 17:12, , 4F
\囧/ [扭扭]
01/08 17:12, 4F
文章代碼(AID): #1BHk_-2d (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 8 篇):
文章代碼(AID): #1BHk_-2d (java)