변경 가능한 맵을 닫힌 스코프 내부의 불변의 맵으로 변환하고 싶습니다. 여기에 상황과 말도 안되는 방어 사본의 샘플 코드는 : 나는 변경할지도가 외부에서 실제로 불변이기 때문에 완전히, 낭비 여기 방어 사본을하고, "넌센스"을 썼던 것처럼복사 할 수없는 변경 가능한 맵을 만드는 방법
def func(): immutable.Map[String, Int] = {
val map = mutable.HashMap[String, Int]
// here goes operations for the map
return immutable.HashMap ++ map
}
. 외부에서 얻을 수있는 게터 작업 만 수행 할 수 있다면 성능 향상에 도움이됩니다.
문제는 내가 실제로 어떻게 해야할지 모르겠다는 것입니다. 난 익명 불변의지도 인스턴스에 의해 간단하게 그것을 포장하려했지만, 방법 def +[B1 >: B](kv: (A, B1))
불가능합니다.
도와주세요!
편집 :
def func(): collection.Map[Int, Int] = {
val map = mutable.HashMap[String, Int]
// here goes operations for the map
return map
}
사용자가 mutable.Map
에 캐스팅 수 : 당신이 collection.mutable.Map
및 collection.immutable.Map
의 공통 상위 유형 인, 단순히 collection.Map
을 반환 할 수 있습니다 [String, Int]
나는 반환 된지도를 불변의지도로하고 싶지만, collection.Map 역시 불변으로 보인다. 나는 너무 혼란 스럽다 ... 불변의 것을 말해 줄 수 있겠습니까. 상속을 받음으로지도가됩니다. 괜찮 으면지도 해봐? :/ –
@AlexeyRomanov Brilliant! 짧고 요점. 때로는 컬렉션 라이브러리가 너무 복잡하고 너무 많은 특성을 포함하고 있지만이를보고 이해합니다. – wheaties
@RyoichiroOka 그들은 (기본적으로) 동일한 API를 가지고 있습니다. 'immutable.Map'은 실제로 불변합니다 (언급 된 것처럼 반사를 사용하지 않는 것); 'collection.Map'은 변경 가능하거나 변경 불가능할 수 있습니다 (그러나 변경할 수있는 경우에도이를 변환하지 않고 변경 메소드에 액세스 할 수 없습니다). –