我为什么要恶心闭包

442 2022-01-25 18:41

我只是在自己的专利落地中用到了私有内部类。解决了“内部类能访问外围类的所有成员,包括私有成员。”的需求。

然后在python复现功能的时候,发现递归调用不用内部类,可以用嵌套函数来解决。

不幸看到了闭包的概念。网上百度、谷歌了一堆知识。大体意思是:

lambda表达式就是匿名函数,可以解决java中借口函数简化表达,不产生新类。提高效率。简单说就是匿名内部类能干的,lambda表达式都能替换。但是从实现方式上,就已经不是类的对象了,而是闭包实例。

python在函数中定义函数,这在过程语言函数是第一等公民的原则下,无可厚非。但是相比java,python在落实闭包上更进一步。

 

java是个残缺的闭包,因为闭包的两个条件:1.内部函数。2.外部自由变量。合在一起才是闭包。而java的变量位于方法内部,也就是虚拟机栈。而内部函数也就是内部类里面的函数在堆。所以必需拷贝。这一拷贝就要求final。这一final就不那么同步了。https://zhuanlan.zhihu.com/p/29245059

 

全部评论

·