JAVA里闭包的一个小技巧
几年前看caffeine的代码学到的,昨天又用了一下,感觉记录下来比较好。
JAVA闭包里面是不能对变量赋值的,JAVA8的lambda也是一样,但是日常工作中,经常也会遇到要在闭包或者lambda里面设置一个flag,更新一个counter这样的需求。如果要硬拗过这个限制,代码又会很扭曲。
其实有种简单的方式绕过这个限制,虽然限制了对变量的赋值,但是没有限制对数组元素的赋值,所以最简单的方法就使用一个长度为1的数组,用variable[0]替代variable。比如下面这个例子,使用visitor遍历树节点,如果index和上次的index一致,就跳过,否则才执行特定逻辑。
int[] lastIndex = new int[1]; lastIndex[0] = -1; // never exists -1 index tree.travelNodes(new NodeVisitor() { @Override public void acceptNode(Node node, int index) { if (index != lastIndex[0]) {
// do something ...
} lastIndex[0] = index; } });
热门话题 · · · · · · ( 去话题广场 )
- 2024画春天 170.0万次浏览
- 你是什么时候开始体会到中年危机的? 新话题 · 74.2万次浏览
- 翻书过春天 4.6万次浏览
- 办公室同事间的有趣对话 8141.0万次浏览
- 发现父母老去的那个瞬间 119.0万次浏览
- 我和父母的搞笑日常 新话题 · 2321.4万次浏览