【发布时间】:2015-03-19 11:49:12
【问题描述】:
例如,在匿名内部类的情况下,传递(匿名)对象引用并执行该对象的方法。
Lambda 是在需要时执行的代码块。
当遇到 lambda 时,JVM 会发生什么? JVM 将 lambdas 相关的代码块存放在哪里(Heap : Young, Old or Permanent Generation)?
我尝试搜索,得到了使用 lambdas 的语法,但无法理解 JVM 内部发生了什么,因为在 JAVA 中一切都是基于对象的。
那么在 OOP 上下文中,lambda 是如何工作的?
lambda 是否违反 OOP 概念?
Lambda 对垃圾收集器有好处吗,因为没有创建对象 不用担心内存问题和清除内存?
【问题讨论】:
-
我认为 lambdas 是另一种让你的代码更紧凑(或者可能更好)的方法。 OOP 的范式并没有以那种方式触及,但这是我的看法。
-
Lambda 是 函数式编程 的重要组成部分,正如您所知道的 OOP 不同。
-
从表面上看,lambda 表示法似乎违反了“结构化编程”的一些规则,这是 OOP 的一个(很少提及的)基础。不过,我还没有仔细研究过它,而且 javac 在过去 10 年里已经变成了一大堆非结构化的混乱。
-
如果我们担心如何在编译器或虚拟机中实现 lambda,难道不应该先对所有这些 goto 进行处理吗?
-
一个常见的误解是 OOP 和 FP 在某种程度上相互矛盾。但是我们不会因为编写面向对象程序或函数式程序而获得报酬,我们会因为编写工作程序而获得报酬(无论如何,理想情况下)。OOP 和 FP 都为我们提供了包含自然复杂性的工具编程;作为程序员,我们应该尽可能多地从 OOP 和 FP 中学习,并在有助于实现编写工作、可维护、可测试、可读、无错误程序的目标的地方使用他们每个人所教的东西。
标签: java oop lambda jvm java-8