Question

Je travaillais avec une variable que j'avais déclarée comme un entier et découvert que> est pas membre d'entier. Voici un exemple 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
         ^

Comparez cela à un Int:

scala> j
res30: Int = 3

scala> j > 3
res31: Boolean = false

Quelles sont les différences entre les nombres entiers et Int? Je vois l'avertissement de dévalorisation, mais on ne sait pas bien pourquoi il a été dépréciée et, étant donné qu'il a été, pourquoi il n'a pas> méthode.

Était-ce utile?

La solution

"Quelles sont les différences entre les nombres entiers et Int?"

Entier est juste un alias pour java.lang.Integer. Int est l'entier Scala avec les capacités supplémentaires.

Recherche dans Predef.scala vous pouvez le voir l'alias:

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

Cependant, il y a une conversion implicite de Int à java.lang.Integer si vous en avez besoin, ce qui signifie que vous pouvez utiliser Int dans les méthodes qui prennent un entier.

Quant à savoir pourquoi il est dépréciée, je ne peux que supposer qu'il était d'éviter toute confusion sur quel type d'entier que vous travaillez.

Autres conseils

Entier sont importées de java.lang.Integer et est uniquement pour la compatibilité avec Java. Comme il est une classe Java, bien sûr, il ne peut pas avoir une méthode appelée « < ». EDIT:. Vous pouvez atténuer ce problème en déclarant une conversion implicite de type entier vers Int

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

Vous aurez toujours alerte deprecation bien.

Je pense que le problème que vous voyez a doit faire la boxe / unboxing des types de valeur et l'utilisation de l'entier de classe Java.

Je pense que la réponse est ici: boxe et unboxing à Scala . Il n'y a pas implict unboxing à Scala. Vous avez défini i comme la classe Java entier, mais dans le, le 3 est traité i> 3 et un int.

Integer est une classe Java, java.lang.Integer. Il est différent de int de type primitif de Java, ce qui est une classe. Il ne peut pas avoir < défini, parce que Java ne permet pas aux opérateurs de définir des classes.

Maintenant, vous pourriez vous demander pourquoi un tel type existe à tous? Eh bien, les types primitifs ne peuvent pas être passés comme références, donc vous ne pouvez pas passer un int à une méthode qui attend java.lang.Object, ce qui équivaut à la AnyRef Scala, par exemple. Pour ce faire, vous mettez que int l'intérieur d'un objet Integer, puis passez le Integer.

Entier sont importées de java.lang.Integer et est uniquement pour la compatibilité avec Java. Comme il est une classe Java, bien sûr, il ne peut pas avoir une méthode appelée « < ».

EDIT:. Vous pouvez atténuer ce problème en déclarant une conversion implicite de type entier vers Int

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top