[英]Using scala.collection.immutable.Map inside my java class
[英]Using Scala extension of immutable class in Java
我有一個擴展TreeMap[Long,HashSet[DSFrame]]
的Scala類EMCC
TreeMap[Long,HashSet[DSFrame]]
我有一個Java類,我試圖創建一個EMCC
並為其添加一個新的鍵值對。 我可以很好地創建一個新的EMCC實例,但由於TreeMap是不可變的,我不能簡單地調用
emcc.insert(key, value)
但必須改為打電話
emcc = emcc.insert(key,value)
嘗試編譯它會產生以下錯誤:
error: incompatible types
[javac] emcc = emcc.insert(key, value);
[javac] ^
[javac] required: EMCC
[javac] found: TreeMap<Object,Set<DSFrame>>
嘗試將插入結果轉換為EMCC僅產生相同的錯誤。
如何讓這些游戲很好地結合在一起?
我注意到的一件事是它報告結果的鍵是對象,這是奇怪的,因為在這種情況下key
很長,但我不確定這是否相關。
如果您想使用特定於域的方法擴展TreeMap,我會看到兩種可能的解決方案。
組成
class EMCC(private val map: TreeMap[Long, HashSet[DSFrame]] = TreeMap.empty[Long, HashSet[DSFrame]]) {
def insert(key: Long, value: HashSet[DSFrame]) = new EMCC(map + (key -> value))
def foo = map.size
}
var e = new EMCC
e = e.insert(23L, HashSet.empty[DSFrame])
println(e.foo)
或隱式類
type EMCC = TreeMap[Long, HashSet[DSFrame]]
implicit class EmccExt(map: EMCC) {
def foo = map.size
}
var e = new EMCC
e = e.insert(23L, HashSet.empty[DSFrame])
println(e.foo)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.