

[`scala.collection.mutable.TreeMap`](http://www.scala-
lang.org/api/current/scala/collection/mutable/TreeMap.html)がsealedで、その他の`Map`(例えば[`HashMap`](http://www.scala-
lang.org/api/current/scala/collection/mutable/HashMap.html))がそうでないのは何故でしょうか？(さらに言えば、immutableな[`TreeMap`](http://www.scala-
lang.org/api/current/scala/collection/immutable/TreeMap.html)はfinal、[`HashMap`](http://www.scala-
lang.org/api/current/scala/collection/immutable/HashMap.html)はsealedになっており、修飾子をつける基準が見いだせませんでした。)

Scalaでsealedなクラスを使うのは、case
classと組み合わせてパターンマッチの漏れをコンパイラが検出できるようにするためだと思っていたのですが、それ以外に理由はあるのでしょうか？


CC BY-SA 3.0
2017-05-31T13:53:23.113
35167
2020-07-24T12:04:00.367
13199
question
scala
Scalaでクラスをsealedにする理由とは？


継承して拡張することは防ぎたいけれど、finalにすると[`rangeImpl`](http://www.scala-
lang.org/api/current/scala/collection/mutable/TreeMap.html#rangeImpl\(from:Option\[A\],until:Option\[A\]\):scala.collection.mutable.TreeMap\[A,B\])などでTreeMapを継承したクラスを返すことが出来ないという実装詳細ではないかと思います。


CC BY-SA 3.0
2018-03-07T04:36:46.807
42187
2018-03-07T04:36:46.807
241
35167
answer