Как я могу предотвратить получение функцией Scala значения null в качестве аргумента

У меня есть метод Scala с этой подписью:

  def m (map: Map [String, _])

Я предполагаю, что Map является ссылочным типом, и поэтому я могу вызывать m, передавая null

  m (null) // Allowed call

Есть ли способ запретить компилятору null вызовы некоторых методов? Другие языки, такие как Kotlin, допускают это, явно указывая, что параметр может иметь значение null: http://kotlinlang.org/docs/reference/null-safety.html

Есть ли что-то подобное в Scala?

РЕДАКТИРОВАТЬ: Спасибо за ваши комментарии. Я понимаю, что "пустые" ссылки - это вопрос времени выполнения, но другие языки с другими системами типов позаботятся об этом во время компиляции.

Я только хотел узнать, есть ли способ и в Scala (начинаю использовать язык). Проверка комментариев, ответа и иерархии типов Scala Я гость это не возможно.

Для объектов значений (таких как неизменяемые коллекции и классы case) может иметь смысл избегать «null» (однако они расширяют AnyRef).

Я мог бы попытаться избежать «нулевого значения», но, например, Map.get возвращает «нулевое значение», если ключ не найден, поэтому я должен справиться с этим.

Что касается Map[String, _], это неоднородная карта, думайте о ней как об объекте JSON. Могу ли я справиться с этим другим, более похожим на Scala способом?

Спасибо!


person jaguililla    schedule 05.04.2015    source источник
comment
Это невозможно со стандартным компилятором и не работает с плагином компилятора. Черта маркера NotNull устарела с версии 2.11. Кстати, работа с _ в качестве типа значения карты не способствует безопасности типов.   -  person cchantep    schedule 05.04.2015
comment
null существует в Scala для взаимодействия с Java. Обычно мы делаем вид, что его не существует, потому что он в корне сломан. Просто никогда и нигде не передавайте null.   -  person Chris Martin    schedule 05.04.2015


Ответы (1)


Любой ссылочный тип (AnyRef) может по определению JVM быть null, и компилятор не может обеспечить, чтобы ни одна клиентская сторона не вызывала вашу функцию с null.

Я настоятельно рекомендую вообще не использовать значения null при работе со Scala. Если вам нужно обработать отсутствующие значения, используйте вместо этого тип Option.

person 0__    schedule 05.04.2015