Una cosa que no entiendo acerca de Scala, es por qué Null subclasifica todo, a pesar de no pasar la prueba de sustitución. Presumiblemente, esto es para la compatibilidad con Java, lo cual está bien, supongo, pero luego Scala empuja el patrón Option [T].¿Por qué la opción [T] de Scala no se traduce directamente a un T en bytecode?
Esto no lo entiendo. Una Opción [T] no le da ninguna garantía adicional (ya que cada T es una Opción de hecho de todos modos). Pero también hace un total de 4 estados:
val a: Option[String] = null
val b: Option[String] = Some(null)
val c: Option[String] = None
val d: Option[String] = Some("A string")
Esto parece ineficiente (POV de un código de bytes) y tal vez incluso peor que el dolor de Java. Cuál es mi pregunta, por qué Scala no hizo de la Opción [T] un caso especial que se traduce directamente en una T. de byte de Java. Toda la interfaz con el código de Java (que usa referencias) tendría que ser a través de esta Opción [T] (que realmente , es exactamente lo que es). Y habría una anotación o algo así, para cuando un método de Scala funciona con una T que no puede ser Ninguna.
Esto parece ser el más obviamente correcto, el más seguro y el más eficiente.
Gracias
puede llamar a null.isInstanceOf [X] también. isInstanceOf es un método sintético. –