实战 Groovy: @Delegate 注释
2009-09-28 00:00:00 来源:WEB开发网清单 14. 测试极端情况
class FixedListTest extends GroovyTestCase{
void testNegativeSize(){
List badList = new FixedList(-1)
shouldFail(java.lang.UnsupportedOperationException){
badList << "will this work?"
}
}
}
测试将一个元素插入到列表中间的情况
现在,您已经确信这个简单的重写过的 add() 方法可以正常工作,下一步是实现重载的 add() 方法,可以获取索引以及元素,如清单 15 所示:
清单 15. 使用索引添加元素
class FixedList{
@Delegate private List list = new ArrayList()
final int sizeLimit
void add(int index, Object element){
list.add(index, element)
trimToSize()
}
private void trimToSize(){
if(list.size() > sizeLimit){
(sizeLimit..<list.size()).each{
list.pop()
}
}
}
}
注意,您可以(也应该)在任何可能的情况下使用 delegate 自带的功能 — 毕竟,这正是您优先选择 delegate 的原因。在这种情况下,您将让 ArrayList 执行添加操作,并去掉任何超出 FixedList 的大小的元素。(这个 add() 方法是否应该像另一个 add() 方法那样抛出一个 UnsupportedOperationException,您可以自己做出这个设计决策)。
trimToSize() 方法包含了一些值得关注的语法糖。首先,pop() 方法是由 Groovy 元编程到所有 List 中的内容。它删除了 List 中的最后一个元素,使用后进先出(last-in first-out,LIFO)的方式。
- ››Groovy轻松入门
- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
更多精彩
赞助商链接