映射值的延迟实例化

lap*_*ots 0 groovy

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

例如

class MapTest {
    @Lazy(soft = true) HashMap<String, List<String>> map
}
Run Code Online (Sandbox Code Playgroud)

这样做我可以使用这个电话并null在没有收到的情况下得到NullPointerException

new MapTest().map.key1
Run Code Online (Sandbox Code Playgroud)

然而尝试打电话

map.key1.remove(1) 
Run Code Online (Sandbox Code Playgroud)

将导致NullPointerException应有的value存在nullIndexOutOfBounds(如果抛出异常就好了)

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

Jér*_*e B 5

尝试map.withDefault

def map = [:].withDefault { [] }
assert map.key1.isEmpty()
Run Code Online (Sandbox Code Playgroud)

一些解释:

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

在这里查看其他例子