我有以下代码
myQueue.offer(new myObj(
fcnA,
Collections2.transform(...),
Collections2.transform(...)
))
我的问题是Collections2.transform(...)
评估的是什么时候?
我的猜测是,直到从队列调用myObj的创建才会发生这种情况。这是对的吗?
答案 0 :(得分:2)
简而言之,是的,它将在调用构造函数时进行评估。
请参阅Java语言规范(JLS),15.12.4.2. Evaluate Arguments,特别是最后两段和Example 15.12.4.1-2. Evaluation Order During Method Invocation。
答案 1 :(得分:1)
Collections2
看起来像一个番石榴类。如果是这样,那么transform()
将返回一个惰性集合,即实时视图到源集合中。当您实际访问选择时,将评估所有操作。元素通过Collection
接口(可能在迭代集合时)。
如果您需要更改集合的副本,则需要自行制作副本(例如new ArrayList(Collections2.transform(...))
)。