java闭包实现 Dear 丶 2022-10-01 08:57 21阅读 0赞 深入理解Java闭包概念 闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在。 解释二:闭包是函数和相关引用环境组成的实体。 注:<自由变量>:除了局部变量的其他变量 简单理解:闭包能够将一个方法作为一个变量去存储,这个方法有能力去访问所在类的自由变量。 Java中闭包实现 关键点: 如何用变量去存储方法? java中能够保存方法的变量指的就是普通的对象 如何让这个普通对象能够访问所在类的自由变量? 纯天然的解决办法是:内部类。内部类能够访问外部类的所有属性及方法。 隐藏具体实现是内部类的作用之一,如何保证隐藏具体实现的同时还能将闭包传递到外部使用? 让内部类实现通用接口,然后将内部类对象向上转型为接口类型。 上述解决办法就是Java最常用的闭包实现办法(内部类+接口) 下面提供一个简单的实现 \[java\] view plaincopyprint? public class Milk \{ public final static String name = "纯牛奶";//名称 private static int num = 16;//数量 public Milk() { System.out.println(name+":16/每箱"); } /** * 闭包 * @return 返回一个喝牛奶的动作 */ public Active HaveMeals() { return new Active() { public void drink() { if(num == 0) { System.out.println("木有了,都被你丫喝完了."); return; } num--; System.out.println("喝掉一瓶牛奶"); } }; } /** * 获取剩余数量 */ public void currentNum() { System.out.println(name+"剩余:"+num); } \} /\*\* * 通用接口 \*/ interface Active \{ void drink(); \} 使用上述实现 \[java\] view plaincopyprint? public class Person \{ public static void main(String[] args) { //买一箱牛奶 Milk m = new Milk(); Active haveMeals = m.HaveMeals(); //没事喝一瓶 haveMeals.drink(); //有事喝一瓶 haveMeals.drink(); //看看还剩多少? m.currentNum(); } \} 运行结果 \[java\] view plaincopyprint? 纯牛奶:16/每箱 喝掉一瓶牛奶 喝掉一瓶牛奶 纯牛奶剩余:14 上述例子中,通过调用Active的方法实现对Milk私有变量num进行修改。 有时候觉得直接使用set方法也可以直接修改private变量,但是从现实生活中来说让人去执行喝牛奶的动作比牛奶自己动手喝来的合理一些。 总结 1.实际项目中没怎么用过闭包,因此不能对他的好坏进行评论。 2.建议合理的使用闭包,不完全不使用,也不能滥用。 3.特别注意:闭包会导致资源不被回收,如上例,在main方法中将m设为null,使用haveMeals继续调用drink方法仍然会喝掉一瓶牛奶,说明Milk对象并没有被释放掉。 [转载来自 https://www.cnblogs.com/ssp2110/p/3797666.html][https_www.cnblogs.com_ssp2110_p_3797666.html] [https_www.cnblogs.com_ssp2110_p_3797666.html]: https://www.cnblogs.com/ssp2110/p/3797666.html
相关 java闭包实现 深入理解Java闭包概念 闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一 Dear 丶/ 2022年10月01日 08:57/ 0 赞/ 22 阅读
相关 Java闭包 package Test; public class Test \{ private int data=0; private class Inner 野性酷女/ 2022年07月15日 08:59/ 0 赞/ 197 阅读
相关 闭包 1、定义: 当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包 function A(){ var count = 0; 素颜马尾好姑娘i/ 2022年06月09日 09:20/ 0 赞/ 314 阅读
相关 JAVA闭包 一、闭包的定义。 有很多不同的人都对闭包过进行了定义,这里收集了一些。 \ 是引用了自由变量的函数。这个函数通常被定义在另一个外部函数中,并且引用了外部函数中的变量 Dear 丶/ 2022年06月06日 05:54/ 0 赞/ 202 阅读
相关 闭包 先来看一个题目例子,我将在下一环节出闭包讲解。。 题目描述 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 喜欢ヅ旅行/ 2022年06月04日 05:51/ 0 赞/ 308 阅读
相关 闭包 写在前面 > 其实闭包这个词在很多的地方都听到过,以前看到说这是前端javascript这门语言的所具有的特点。当时不知所以然也没接触到对应的概念,现在遇到一个问题就是, 桃扇骨/ 2022年05月15日 03:14/ 0 赞/ 362 阅读
相关 闭包 JS闭包 > 闭包是函数和声明该函数的词法环境的组合 从本质上讲,闭包是外部函数和内部函数链接的桥梁;也就是在一个作用域中可以访问另一个作用域的变量,外部函数作用 朴灿烈づ我的快乐病毒、/ 2022年04月03日 15:54/ 0 赞/ 380 阅读
相关 闭包 闭包 1. 函数引用 def test1(): print("--- in test1 func----") \调用函数 test1() \引用函数 桃扇骨/ 2022年02月20日 00:35/ 0 赞/ 377 阅读
相关 闭包 在函数内定义个函数,并将函数作为结果返回。返回的函数可以调用外部函数的参数,如果该函数被执行,将返回已经结算出的值 <!DOCTYPE html> <html 古城微笑少年丶/ 2022年02月01日 09:01/ 0 赞/ 387 阅读
相关 闭包 闭包: 就是能够读取其他函数内部变量的函数或者说闭包就有权访问另一个函数作用域中的变量的函数。 作用: 1.可以读取函数的变量 2.让这些变量的值始终保存在内存中 3 墨蓝/ 2021年10月01日 06:58/ 0 赞/ 516 阅读
还没有评论,来说两句吧...