在Kotlin中,Map
類有toLinkedMap()
和toSortedMap()
擴展方法。Kotlin Map:爲什麼沒有toHashMap()?
但爲什麼沒有toHashMap()
方法?實際上,由此產生的Map
許多stdlib方法的實現是LinkedHashMap
,但在我的代碼中將其轉換爲HashMap
會使我依賴於不好的實現。
引入這樣的方法會使開發人員無法深入到實現中,而使用當前實現它只會執行強制轉換。
我的使用情況是:
val matchesInClass: HashMap<MessageClass, HashMap<Int, Int>>
//...
for ((cl, matches) in matchesInClass) {
matchesInClass[cl] = matches.filterKeys { it !in banned } //error: not a HashMap
}
當我使用HashMap(matches.filterKeys { it !in banned })
它會導致創建一個新的地圖,我很樂意避免的開銷。
那麼,它是由設計?
爲什麼你需要matchesInClass的第二個類型參數是HashMap中,而不是簡單的地圖或MutableMap? 即matchInClass的類型爲'HashMap>' –
Ilya
@Ilya,'Map'不會因爲'// ...'部分我執行'matchesInClass'值的編輯。 'MutableMap'不適合:'filterKeys'返回無法轉換爲'MutableMap'的'Map'。 – hotkey
問題是「爲什麼」或「意見」可能被標記爲關閉,因爲他們並不真正要求解決問題。你應該編輯你的問題,詢問創建'toHashMap'函數的最佳方式,或者你給定問題的替代方法(例如filterKeys不返回你想要的)。其他地方最好問產品功能的狀態,設計決定和開放式問題。 –