En Scala,¿Por qué los tipos primitivos como Int se borran a Object en Scala?
{ x: Option[Int] => x }
.getClass
.getMethod("apply", classOf[Option[_]])
.getGenericParameterTypes
vuelve Array(scala.Option<java.lang.Object>)
. Inicialmente esperaba ver Array(scala.Option<scala.Int>)
, pero veo que scala.Int
es una clase de valor (extiende AnyVal
) 'cuyas instancias no están representadas como objetos por el sistema host subyacente'.
Todavía no entiendo la eliminación a Object
, sin embargo. ¿No podría ser el mucho más útil java.lang.Integer
?
Eso no es Scala haciendo eso, es Java. Para obtener resultados útiles, como en los que no son Object, de "GenericParameterTypes" (un método de un objeto de la clase Java), se debe crear una subclase. Scala * no * creó una Subclase, digamos 'OptionInt', para' Opción [Int] '. (Consulte @especializado, ¿quizás?) –
@pst; Creo que estás en el camino equivocado. Cambia 'Int' a' Symbol' arriba y obtienes 'Array (scala.Option)'. –
Hmm, bueno ahí va mi hipótesis: - Culpo a la magia del compilador. –