博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Lambda和匿名内部类
阅读量:6720 次
发布时间:2019-06-25

本文共 1151 字,大约阅读时间需要 3 分钟。

先上代码

//g=cache(f)    public 
Function
cache(Function
f){ final Map
cache=new HashMap<>(); Function
g=t->{ if(cache.containsKey(t)){ System.out.println("cached t:"+t); return cache.get(t); } System.out.println("not cached t:"+t); R r=f.apply(t); cache.put(t, r); return r; }; return g;// return new Function
(){// final Map
cache=new HashMap<>();//// @Override// public R apply(T t) {// if(cache.containsKey(t)){// System.out.println("cached t:"+t);// return cache.get(t);// }// R r=f.apply(t);// System.out.println("not cached t:"+t);// cache.put(t, r);// return r;// }// // }; }

这是网上的一篇文章后面留的习作,题目是传入一个函数f,返回一个等效的cache版本函数g。题目本身没什么,只是在我实现的过程中对两种方法有一些感想,列在下面以作备忘。

  • 要清楚自由变量和限定变量的区别
  • 仅从效果来看lambda写起来简洁,但不如内部类灵活
  • 匿名内部类编译后会生成一个顶层类,编译器自动生成的构造函数里,第一个参数必定是包装类的引用,其余的参数依次是捕获的自由变量。
  • lambda不会生成另外的类(没有发现class文件)
  • lambda对应invokedaynamic指令

一些扩展阅读的博客文章

转载于:https://www.cnblogs.com/batz/p/memo_java_lambda_anonymous-inner-class.html

你可能感兴趣的文章
zookeeper 原理(转)
查看>>
我在印尼工作的日子-初来乍到
查看>>
Linux/安卓+SPI以太网项目
查看>>
PostgreSQL MySQL 的一次速度测试
查看>>
C 语言程序设计
查看>>
Dns信息收集工具集合
查看>>
MQ产品比较-ActiveMQ-RocketMQ
查看>>
yii框架cridview的ajax更新
查看>>
STL容器选择
查看>>
android:layout_gravity 和 android:gravity 的区别
查看>>
嵌入式C题
查看>>
maven学习笔记
查看>>
说说Java线程池
查看>>
Linux挂载命令mount用法及参数详解
查看>>
Nginx 动静分离
查看>>
MySQL如何实现数组功能
查看>>
Android第四十七期 - WheelView沉浸式菜单栏
查看>>
Spring Boot--模板从JSP到Freemarker的若干问题
查看>>
Java内存模型的探究
查看>>
CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录《第二部分:编译,安装,测试》
查看>>