У меня есть метод 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 способом?
Спасибо!
NotNull
устарела с версии 2.11. Кстати, работа с_
в качестве типа значения карты не способствует безопасности типов. - person cchantep   schedule 05.04.2015null
существует в Scala для взаимодействия с Java. Обычно мы делаем вид, что его не существует, потому что он в корне сломан. Просто никогда и нигде не передавайтеnull
. - person Chris Martin   schedule 05.04.2015