Почему List и Seq определены в пакете scala, а не в scala.collection (даже если реализации Seq находятся в подпакетах коллекции)?
Поскольку они считаются настолько полезными, что автоматически импортируются во все программы через синонимы в scala.Predef.
Каков стандартный механизм инициализации коллекции и ее последующего замораживания (что в Java достигается путем переноса в неизменяемое)?
В Java нет механизма для замораживания коллекции. У него есть только идиома для упаковки (все еще изменяемой) коллекции в оболочку, которая выдает исключение. Правильная идиома в Scala - скопировать изменяемую коллекцию в неизменяемую - возможно, используя: _ *
Почему некоторые типы коллекций (например, MultiMap) определяются только как изменяемые? (Нет неизменного MultiMap)?
Команда / сообщество просто еще не достигли этого. В ветке 2.7 появилось множество дополнений, а в 2.8 ожидается еще больше.
Следующее выглядит немного громоздким из-за принудительного объявления полного пакета:
Scala позволяет импортировать псевдонимы, поэтому в этом отношении он всегда менее многословен, чем Java (см., Например, java.util.Date и java.sql.Date - при использовании обоих этих параметров для полной квалификации)
import scala.collection.{Set => ISet}
import scala.collection.mutable.{Set => MSet}
class MyScala {
var mySet: ISet[String] = null
def init(): Unit = {
val s = MSet.empty[String]
s + "Hello"
s + "World"
mySet = Set(s : _ *)
}
}
Конечно, вы бы просто написали init как def init() { mySet = Set("Hello", "World")}
и сохранили бы все проблемы или, что еще лучше, просто поместили бы это в конструктор var mySet : ISet[String] = Set("Hello", "World")