簡體   English   中英

在Java中使用不可變類的Scala擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM