Một API Java trả lại một java.util.Map<java.lang.String,java.lang.Boolean>
;. Tôi muốn đặt đó vào một Map[String,Boolean]
Cách chuyển đổi từ từ java.util.Map sang một Bản đồ Scala
Hãy tưởng tượng chúng ta có:
var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean>
Bạn không thể làm Map.empty ++ javaMap
, bởi vì phương pháp ++ không biết về bản đồ Java. Tôi cố gắng:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
override def underlying = javaMap
}
và:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
override def underlying = javaMap
}
Những cả thất bại trong việc biên dịch, vì Generics - java.lang.String
là không giống như một String scala.
Có cách nào tốt để thực hiện việc này, không thể sao chép bản đồ theo cách thủ công?
EDIT: Cảm ơn, tất cả các câu trả lời hay, tôi đã học được rất nhiều từ tất cả chúng. Tuy nhiên, tôi đã thực hiện một sai lầm bằng cách đăng một vấn đề đơn giản ở đây hơn là một trong những tôi thực sự có. Vì vậy, nếu bạn cho phép tôi, tôi sẽ khái quát những câu hỏi - Có gì API thực sự trở lại là
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
Và tôi cần phải di chuyển này vào Map [String, Bản đồ [SomeJavaEnum, String]]
Nó có lẽ dường như không quá phức tạp, nhưng nó làm tăng thêm cấp độ xóa, và cách duy nhất tôi tìm thấy là di chuyển nó sang bản đồ Scala đã sao chép sâu nó (sử dụng một số kỹ thuật mà bạn gợi ý dưới đây). Bất cứ ai gợi ý? Tôi đã giải quyết được vấn đề của mình bằng cách xác định một chuyển đổi tiềm ẩn cho các loại chính xác của tôi, vì vậy ít nhất sự xấu xa bị ẩn đi trong đặc điểm riêng của nó, nhưng vẫn cảm thấy hơi bối rối khi sao chép rất nhiều.
Tôi rất thích câu trả lời Chuyển đổi tôi nhận được từ nhóm người dùng scala. Chỉ cần kiểm tra xem nó có hoạt động không ... Nhưng giờ đã quá muộn rồi, vì vậy sẽ sớm đăng lại ... – George