【发布时间】:2010-09-12 10:51:24
【问题描述】:
我有一个大约十行代码的方法。我想创建更多的方法来做同样的事情,除了一个小的计算会改变一行代码。这是一个完美的应用程序,用于传递函数指针以替换该行,但 Java 没有函数指针。我最好的选择是什么?
【问题讨论】:
-
Java 8 将拥有Lambda Expressions。您可以阅读有关 lambda 表达式的更多信息here。
-
@Marius 我不太认为 lambda 表达式算作函数指针。 The
::operator, on the other hand... -
对不起,迟到的评论 ;) - 通常,您不需要函数指针。只需使用模板方法! (en.wikipedia.org/wiki/Template_method_pattern)
-
@isnot2bad - 看那篇文章,似乎有点矫枉过正 - 比这里给出的答案更复杂。具体来说,模板方法需要为每个备选计算创建一个子类。我没有看到 OP 声明了任何需要 subclasses 的内容;他只是想创建几个方法,并共享大部分实现。正如公认的答案所示,这很容易“就地”完成(在每个方法中),甚至在 Java 8 及其 lambda 之前。
-
@ToolmakerSteve 接受的解决方案还需要每个计算的类(即使它只是一个匿名内部类)。并且模板方法模式也可以使用匿名内部类来实现,因此它与公认的开销解决方案(Java 8 之前)没有太大区别。所以这更多的是使用模式和详细要求的问题,我们不知道。我很欣赏被接受的答案,只是想增加另一种可能性。
标签: java closures function-pointers