Java模拟一级函数
在Java中,有没有一种方法可以模拟lua和python中的一流函数,比如这里
def foo():
print "foo called"
bar = foo
bar() #output from this line is "foo called"
或者是在每种情况下使用不同方法的switch语句的唯一方法
编辑:谢谢你的澄清,我想问的是有没有一种方法可以创建一个函数的引用,并像调用函数一样调用它
同样,目标不是调用某个函数的特定实现,而是选择要调用的函数,而函数的选择可以完全不同。我想这样做的原因是为了有一个更通用的类,不必编辑它来添加功能。有点像将函数放入集合或列表
Edit2:对于任何为了找到答案而看这个问题的人来说:这与堆栈和堆有关。Java无法做到这一点,因为它的方法存储在堆栈上,而堆栈比堆更为严格。然而,Python将其函数存储在堆上,并在堆栈上引用它们。由于函数是通过python中的引用调用的,因此可以更改对它们的引用并根据需要使用
# 1 楼答案
您不能为方法模拟按引用传递,因为类似的事情可以使用接口,但对于对象,您可以模拟here
# 2 楼答案
问题中的代码没有演示通过引用传递的行为。事实上,Java和Python都没有按引用传递语义,都是按值传递的
您演示的是一阶函数:将函数视为任何其他值的能力。在Java7和更早版本中,这是不可能的,尽管在Java8中引入了匿名函数的新语法(称为lambdas)。lambda语法可用于模拟所示的行为
# 3 楼答案
(正如我写这篇文章时@Óscar López刚刚发布的)您所做的是保留对函数的引用,并通过值传递它
这样做的“Java方式”是使用接口:
接口:
实施:
(也可以进行其他实现——BarPrinter、BazPrinter等)
来电者: