Java Queue评估顺序

时间:2014-09-29 16:07:08

标签: java guava operator-precedence

我有以下代码

myQueue.offer(new myObj(
    fcnA,
    Collections2.transform(...),
    Collections2.transform(...)
))

我的问题是Collections2.transform(...)评估的是什么时候?

我的猜测是,直到从队列调用myObj的创建才会发生这种情况。这是对的吗?

2 个答案:

答案 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(...)))。