143 votes

Conversion d'un entier en un 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 cette raison, et pour éviter la duplication du 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 utiliser cette méthode comme :

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

ou

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

Le problème, c'est que je n'arrive pas à lancer Integer à Long :

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

Existe-t-il un meilleur moyen d'y parvenir ?

J'utilise Java 1.6.

2voto

kaiser Points 432

Si vous ne connaissez pas la classe exacte de votre numéro ( Entier , Longues , Double ), vous pouvez lancer Nombre et en tirer une valeur à long terme :

Object num = new Integer(6);
Long longValue = ((Number) num).longValue();

1voto

Bremsstrahlung Points 158

Un analyseur syntaxique de int aux variables de l long est inclus dans le Integer classe. 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 les données 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;
}

1voto

Jin Kwon Points 2191

Pour une instance de wrapper nullable,

Integer i;
Long l = Optional.ofNullable(i)
                 .map(Long::valueOf)
                 .orElse(null);

1voto

Shedrack Points 302

Pour convertir un entier en un long, il suffit de convertir la valeur de l'entier en un long.

Integer intValue = 23;
Long longValue = (long) intValue;

0voto

adkisson Points 325

Il s'agit d'une sécurité nulle

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X