延迟实例化地图值

时间:2016-02-06 16:20:45

标签: groovy

有没有办法实例化map lazy的值?

例如

class MapTest {
    @Lazy(soft = true) HashMap<String, List<String>> map
}

这样做我可以使用此致电并获取null而无需接收NullPointerException

new MapTest().map.key1

但是试图打电话

map.key1.remove(1) 
由于NullPointerExceptionvalue

将导致null。 (如果它抛出IndexOutOfBounds异常,那就没关系了)

有没有办法实例化地图的list值?

1 个答案:

答案 0 :(得分:3)

尝试map.withDefault

def map = [:].withDefault { [] }
assert map.key1.isEmpty()

一些解释:

  • [:]是实例化空哈希映射的常规方法
  • withDefault是地图上的一种常规方法。每次请求键初始化值(如果它不存在)时,都会调用此闭包。这个闭包取一个参数(键),值应该是
  • []是创建空列表的常规方法 - {[]}是一个为每个键返回空列表的闭包

查看其他示例here

相关问题