java用回调模拟Lua的闭包功能
来源:互联网 发布:php require 语言结构 编辑:程序博客网 时间:2024/06/06 03:39
最近学习Lua,在书中看到Lua的table迭代器是用闭包实现的,在java7以前的SDK并不提供闭包功能,java的List的Iterator其实并没有实现迭代的功能,实际只提供了迭代生成器
,调用者需要通过for循环或者while循环,遍历 Iterator,笔者参照Lua的闭包Iterat功能,用回调模拟了闭包功能,实现了真正的迭代器,调用者不用再遍历Itertator,即可实现功能,闭包知识参见闭包_维基百科
代码如下:
package com.czp;import java.util.Iterator;/*** * * Really Iterator * * @author CaoZhongping * */public class RIterartor<T> {private Iterable<T> iter;public RIterartor(Iterable<T> iter) {super();this.iter = iter;}/** * * @param processor */public void process(Processor<T> processor) {for (Iterator<T> it = iter.iterator(); it.hasNext();) {processor.process(it.next());}}/** * * @author CaoZhongping * */public interface Processor<T> {Object process(T t);}}//测试代码:package com.czp.test;import java.util.ArrayList;import java.util.List;import com.czp.RIterartor;import com.czp.RIterartor.Processor;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();for (int i = 0; i < 10; i++) {list.add("Test" + i);}RIterartor<String> iter = new RIterartor<String>(list);iter.process(new Processor<String>() {@Overridepublic Object process(String t) {System.out.println(t);return t;}});}}//输出如下,调用者无需遍历Iterator,只需实现业务处理器即可Test0Test1Test2Test3Test4Test5Test6Test7Test8Test9
典型地,在jsp显示查询的结果时,只需这样简单的调用即可生成Html:
package com.czp.test;import java.util.ArrayList;import java.util.List;import com.czp.RIterartor;import com.czp.RIterartor.Processor;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();for (int i = 0; i < 10; i++) {list.add("name" + i);}final StringBuilder sb = new StringBuilder();sb.append("<html>\n\t<head>\n\t\t<title>Test</title></head>\n\t<body>\n\t<table>\n\t<tr>\n");RIterartor<String> iter = new RIterartor<String>(list);iter.process(new Processor<String>() {@Overridepublic Object process(String t) {sb.append("\t\t<td>").append(t).append("</td>\n");return t;}});sb.append("\t</tr>\n\t</table>\n\t<body>\n</html>");System.out.println(sb);}}
//输出如下:
<html><head><title>Test</title></head><body><table><tr><td>name0</td><td>name1</td><td>name2</td><td>name3</td><td>name4</td><td>name5</td><td>name6</td><td>name7</td><td>name8</td><td>name9</td></tr></table><body></html>
- java用回调模拟Lua的闭包功能
- Lua的闭包
- [Lua]lua闭包
- 模拟Java内省的功能
- lua 函数的闭包
- lua 闭包的概念
- Lua闭包的理解
- Lua闭包的详解
- 理解lua的闭包
- 练习(模拟Java内省的功能)
- 类反射 模拟Java内省的功能
- Java版的webdriver 模拟登陆功能
- 关于lua的闭包自我理解
- lua的闭包(closure)研究
- Lua的upvalue和闭包
- 神奇的Lua:闭包和upvalue
- 转lua 闭包的实现 思路
- Lua的upvalue和闭包
- android的一些自定义控件
- emacs中cc-mode的缩进配置方法详解
- 会计科目表和科目的复制
- 基于XMPP协议的Android IM
- C++ Primer 第10章 习题10.27
- java用回调模拟Lua的闭包功能
- 人类创造出来的世界——电子世界
- 欧拉计划网第十九题解决办法——两种方案
- [boost] shared_ptr 简介
- 从一道面试题谈linux下fork的运行机制
- JS闭包可被利用的常见场景
- 谁说开源不能赚钱(转)
- 一日一点RakNet(9)--关于视频
- 欧拉计划网第十三题解决方案