variable def declarar scala types integer int

def - scala int variable



¿Cuáles son las diferencias entre Int y Integer en Scala? (5)

"¿Cuáles son las diferencias entre Integer e Int?"

Integer es solo un alias para java.lang.Integer. Int es el entero Scala con las capacidades adicionales.

Mirando en Predef.scala puedes ver este alias:

/** @deprecated use <code>java.lang.Integer</code> instead */ @deprecated type Integer = java.lang.Integer

Sin embargo, hay una conversión implícita de Int a java.lang.Integer si la necesita, lo que significa que puede usar Int en métodos que toman un entero.

En cuanto a por qué está en desuso, solo puedo suponer que fue para evitar cualquier confusión sobre con qué tipo de entero estaba trabajando.

Estaba trabajando con una variable que había declarado como entero y descubrí que> no es miembro de Integer. Aquí hay un ejemplo simple:

scala> i warning: there were deprecation warnings; re-run with -deprecation for details res28: Integer = 3 scala> i > 3 <console>:6: error: value > is not a member of Integer i > 3 ^

Compara eso con un Int:

scala> j res30: Int = 3 scala> j > 3 res31: Boolean = false

¿Cuáles son las diferencias entre Integer e Int? Veo la advertencia de desaprobación, pero no me queda claro por qué se desaprobó y, dado que ha sido, por qué no tiene un método.


Creo que el problema que está viendo tiene que ver con el boxeo / desempaquetado de tipos de valor y el uso de la clase Java Integer.

Creo que la respuesta está aquí: boxeo y unboxing en Scala . No hay unboxing implícito en Scala. Ha definido i como la clase Java de Integer pero en i> 3 , el 3 se está tratando y un int.


El entero se importa de java.lang.Integer y solo es compatible con Java. Como es una clase de Java, por supuesto, no puede tener un método llamado "<". EDITAR: puede mitigar este problema declarando una conversión implícita de Integer a Int.

implicit def toInt(in:Integer) = in.intValue()

Sin embargo, todavía obtendrá una advertencia de deprecación.


El entero se importa de java.lang.Integer y solo es compatible con Java. Como es una clase de Java, por supuesto, no puede tener un método llamado "<".

EDITAR: puede mitigar este problema declarando una conversión implícita de Integer a Int.


Integer es una clase de Java, java.lang.Integer . Es diferente del tipo primitivo de Java int , que no es una clase. No puede tener < definido, porque Java no permite que se definan operadores para clases.

Ahora, usted podría preguntarse por qué existe tal tipo en absoluto? Bueno, los tipos primitivos no se pueden pasar como referencias, por lo que no se puede pasar un int a un método que espera java.lang.Object , equivalente a AnyRef de Scala, por ejemplo. Para hacer eso, pones ese int dentro de un objeto Integer , y luego pasas el Integer .