java用回调模拟Lua的闭包功能
2012-02-25 19:51
316 查看
最近学习Lua,在书中看到Lua的table迭代器是用闭包实现的,在java7以前的SDK并不提供闭包功能,java的List的Iterator其实并没有实现迭代的功能,实际只提供了迭代生成器
,调用者需要通过for循环或者while循环,遍历 Iterator,笔者参照Lua的闭包Iterat功能,用回调模拟了闭包功能,实现了真正的迭代器,调用者不用再遍历Itertator,即可实现功能,闭包知识参见闭包_维基百科
代码如下:
典型地,在jsp显示查询的结果时,只需这样简单的调用即可生成Html:
//输出如下:
,调用者需要通过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>() { @Override public Object process(String t) { System.out.println(t); return t; } }); } } //输出如下,调用者无需遍历Iterator,只需实现业务处理器即可 Test0 Test1 Test2 Test3 Test4 Test5 Test6 Test7 Test8 Test9
典型地,在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>() { @Override public 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_使用内部类模拟闭包和回调
- java通过模拟post方式提交表单实现图片上传功能实例
- Java通过内部类实现回调功能
- Java基础之(二十三)闭包与回调
- JAVA基础类与对象实现模拟火车站购票功能
- Java实现WinPcap+Wireshark数据抓包模拟联通客户端签到功能
- 初学Java,闭包和回调(二十一)
- 用Java模拟出QQ桌面截图功能(未测试)
- Java基础知识强化之IO流笔记53:IO流练习之 自定义类模拟BufferedReader的readLine()功能案例
- java中的闭包和回调
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- java学习笔记5——java闭包(Closure)和回调
- java多线程模拟抢红包功能
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- Java模拟异步消息的发送与回调
- java模拟登陆功能
- java 闭包(Closure)和回调
- 微信扫码支付模式二功能实现,回调,记录充值,整个完整流程,java开发
- JAVA微信扫码支付模式二功能实现以及回调