Одна вещь, которую я не понимаю в Scala, - это то, почему Null все подклассы, несмотря на то, что не прошел тест на замену. Предположительно, это для совместимости с Java, что, я думаю, хорошо, но тогда Scala использует шаблон Option [T].
Это я не понимаю. Опция [T] не дает вам никаких дополнительных гарантий (так как каждый T в любом случае является опцией defacto). Но это также делает в общей сложности 4 состояния:
val a: Option[String] = null
val b: Option[String] = Some(null)
val c: Option[String] = None
val d: Option[String] = Some("A string")
Это кажется неэффективным (из-за байт-кода) и, возможно, даже хуже, чем просто больно Java. Мой вопрос заключается в том, почему Scala не сделал Option [T] особым случаем, который переводит непосредственно в байт-код Java-кода. Все взаимодействие с Java-кодом (использующим ссылки) должно было бы осуществляться с помощью этого Option [T] (который действительно , это именно то, что это). И будет аннотация или что-то подобное, когда метод Scala работает с T, который не может быть None.
Это кажется наиболее правильным, наиболее безопасным и эффективным.
Спасибо