作者mgtsai ()
看板java
标题Re: [问题] 有没有可能做到类似函式指标的功能?
时间Fri Jan 8 19:22:52 2010
※ 引述《brianhsu (坟墓)》之铭言:
: ※ 引述《mgtsai ()》之铭言:
: : → PsMonkey:==.=== 有没有高手可以解释一下这篇... 我不懂 Orz 01/08 17:17
: : → ken915007:我新手=.= 01/08 18:02
: 我猜他想讲的其实是这个:
: http://www.slideshare.net/Odersky/fosdem-2009-1013261
: 第 27 页的地方,用 object 模拟 function pointer。
: 简单的讲,就是自己定另一个 interface 做为 function 来
: 用就是了。
对,就是这个概念没错
以 Java 而言,因为在 language level 没有支援 function pointer 的概念
(C, C++, .Net 等都有支援类似的概念,在 .Net 中叫做 delegate)
所以为了要模拟 function pointer,那就得自己打造
: 如果你可以像 Scala 一定自己定义 22 不同的 interface,
: 然後把所有 method 都改成 inner class,那确实可以做到
: function pointer 的功能。XD
: 只是应该没人会这麽无聊就是了。
严格地说,是每一种 method signature 必须打造一个 interface
比如,void xxx(void) 定义一个 interface
void xxx(int) 定义一个 interface
int xxx(void) 定义一个 interface
int xxx(int) 定义一个 interface
........
依此类推
如果嫌麻烦的话,也可以定一个 unified interface
interface UnifiedMethod
{
public abstract Object invoke(Object... args);
}
只是如此做,一方面在 method body 的使用上稍微麻烦些
method 的输入参数必须经过型别转换成运算所须的 class
另一方面,就缺少 compile-time type checking 的特性
这些麻烦处,在 Java 没有 language level support 的状况下
是避免不了的
* * * * * * * * * *
不过,也不须要所有的程式码都改写成这个 pattern
只要有需要使用 function pointer 的部分再改写即可
比如,像 Dispatcher 就很适用类似的技巧
当然,如果在其它场合,程式码改写成其它 pattern 可以更简洁的话
那不一定硬要把 function pointer 的概念套进来用
毕竟,每种 method signature 都要打造一个 interface 也是有点烦人的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.129.52
※ 编辑: mgtsai 来自: 60.250.129.52 (01/08 19:31)