例如,我有一個增強JavaFX Label類的隱式類。總之:有沒有辦法使用implicits來初始化匿名對象而不重複「this」?
class EnhanceLabel(val l: Label) extends AnyVal {
def opacity = l.getOpacity
def opacity_= (d: Double) { l.setOpacity(s) }
}
object EnhanceLabel {
implicit def enhanceLabel(x: Label) = new EnhanceLabel(x)
}
我試圖使用它像這樣(進口隱含DEF enhanceLabel後):
val l = new Label() {
opacity = 0.5
}
這並不編譯。錯誤信息:
not found: value opacity
opacity = 0.5
^
我必須做的:
val l = new Label() {
this.opacity = 0.5
}
我想這是因爲不透明度二傳手是隱式轉換?它是否需要「this」來搜索隱式轉換?如果它缺少了,它不會假設「這個」嗎?如果我把這個擴大了很多,我會得到無數的「這個」。關鍵字似乎對我來說是多餘的。當然我可以縮短爲「x」。或類似的東西,但我想完全擺脫它。
任何提示讚賞。
柯蒂斯
出於好奇,爲什麼不乾脆讓'EnhanceLabel'延長'Label'然後讓'l'的,一個匿名實例? –
第一個示例應該編譯,您只需爲超類中的字段賦值,在這種情況下不需要隱式轉換 – 4lex1v
另一個觀察結果是錯誤消息很有用!既爲你和我們。不要在你的問題中說「這不能編譯」;告訴我們它是如何失敗的。強迫自己去看那些會向你展示@AlexIv所說的,關於「文本」是一個已經存在的領域。編譯器知道你實際寫了什麼(而不是你認爲你寫的是什麼),並且是最終的仲裁者。聽聽它說什麼:) –