在從任一類或對象(I假定兩者的治療將是相似的)下面的代碼片斷,:優選的方式聲明和初始化實例/類變量
private var consumer : Consumer = _
def getConsumer(channel : Channel) = if (consumer != null) {
consumer }
else {
// build it
}
我不相信,我們會盲目地只是把它周圍的一個選項在所有情況下:
private var consumer : Option[Consumer] = None
def getConsumer(channel : Channel) = consumer.getOrElse(
// build it
consumer = Some(/* built val */)
}
是上面是完全可能的,但它是我的預感有替代品在那裏。見解欣賞。
編輯消費者對象被直接發送給第三方api;因此這裏不需要修改/修改需要更改簽名。
下面是一個例子:
channel.basicConsume(queue, true, getConsumer(channel))
OR
// assuming consumer were already constructed with a Channel instance in the constructor
channel.basicConsume(queue, true, consumer)
這看起來像你正在試圖重新創建'lazy val'功能。也許看看這是怎麼完成的。 – ggovan
Thx爲小費。我現在正在研究懶惰的val(並且你是對的 - 我不是很熟悉它們) – javadba
@ggovan我們如何處理懶惰val的Channel參數? – javadba