Одна вещь, которую я не понимаю о 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")
Это кажется неэффективным (от байт-кода pov) и, возможно, даже хуже, чем просто боль Java. Каков мой вопрос: почему бы не Scala сделать Option [T] особым случаем, который переводится непосредственно в байт-код T Java. Все сопряжение с кодом Java (использующим ссылки) должно быть через этот параметр [T] ( который действительно, это именно то, что есть). И будет аннотация или что-то еще, если метод Scala работает с T, который не может быть None.
Это кажется наиболее очевидным правилом, наиболее типичным и наиболее эффективным.
Спасибо