web-dev-qa-db-fra.com

Conversion d'un entier en long

J'ai besoin d'obtenir la valeur d'un champ en utilisant la réflexion. Il se trouve que je ne suis pas toujours sûr du type de données du champ. Pour cela, et pour éviter la duplication de code, j'ai créé la méthode suivante:

@SuppressWarnings("unchecked")
private static <T> T getValueByReflection(VarInfo var, Class<?> classUnderTest, Object runtimeInstance) throws Throwable {
  Field f = classUnderTest.getDeclaredField(processFieldName(var));
  f.setAccessible(true);
  T value = (T) f.get(runtimeInstance);

  return value;
}

Et utilisez cette méthode comme: 

Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);

ou

Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);

Le problème est que je n'arrive pas à convertir Integer en Long:

Java.lang.ClassCastException: Java.lang.Integer cannot be cast to Java.lang.Long

Y a-t-il un meilleur moyen d'y parvenir?

J'utilise Java 1.6.

86
Tiago Veloso

Non, vous ne pouvez pas convertir Integer en Long, même si vous pouvez convertir de int en long. Pour un individu valeur qui est connue pour être un nombre et que vous voulez obtenir la valeur longue, vous pouvez utiliser:

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();

Pour les tableaux, ce sera plus compliqué ...

76
Jon Skeet

Simplement:

Integer i = 7;
Long l = new Long(i);
110
vahid kh
Integer i = 5; //example

Long l = Long.valueOf(i.longValue());

Cela évite la perte de performance de la conversion en chaîne. La méthode longValue() dans Integer est simplement une conversion de la valeur int. La méthode Long.valueOf() donne à la machine virtuelle une chance d'utiliser une valeur mise en cache.

40
Rich MacDonald

Curieusement, j'ai trouvé que si vous analysez à partir d'une chaîne, cela fonctionne.

 int i = 0;
 Long l = Long.parseLong(String.valueOf(i));
 int back = Integer.parseInt(String.valueOf(l));

Gagner.

18
Anon

Convertissez directement un entier en long en ajoutant 'L' à la fin d'Integer.

Long i = 1234L;
6
Jeff Johny

Conversion de entier en long Très très simple et de nombreuses façons de convertir cela
Exemple 1

 new Long(your_integer);

Exemple 2

Long.valueOf(your_integer); 

Exemple 3 

Long a = 12345L;

Exemple 4
Si vous avez déjà saisi l'entier en tant qu'entier, vous pouvez le faire: 

Integer y = 12;
long x = y.longValue();
6
Naresh Kumar
((Number) intOrLongOrSomewhat).longValue()
4
cingulata

Si l'entier n'est pas nul 

Integer i;
Long long = Long.valueOf(i);

i sera automatiquement converti en long.

L'utilisation de valueOf au lieu de new permet la mise en cache de cette valeur (si petite) par le compilateur ou la machine virtuelle Java, ce qui permet un code plus rapide.

4
Sharad Holani
new Long(Integer.longValue());

ou 

new Long(Integer.toString());
1
Pavlo Zvarych

Si vous savez que l'entier n'est pas NULL, vous pouvez simplement faire ceci:

Integer intVal = 1;
Long longVal = (long) (int) intVal
1
Steven Spungin

Un analyseur syntaxique de variables int au type long est inclus dans la classe Integer. Voici un exemple: 

int n=10;
long n_long=Integer.toUnsignedLong(n);

Vous pouvez facilement utiliser cette fonction intégrée pour créer une méthode qui analyse de int à long:

    public static long toLong(int i){
    long l;
    if (i<0){
        l=-Integer.toUnsignedLong(Math.abs(i));
    }
    else{
        l=Integer.toUnsignedLong(i);
    }
    return l;
}
1
Bremsstrahlung

C'est null-safe

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();
0
adkisson