web-dev-qa-db-fra.com

Comment convertir un objet en int

Comment puis-je lancer un objet sur un int en java?

182
Sheehan Alam

Si vous êtes sûr que cet objet est un Integer:

int i = (Integer) object;

Ou, à partir de Java 7, vous pouvez écrire de manière équivalente:

int i = (int) object;

Attention, il peut générer un ClassCastException si votre objet n'est pas un Integer et un NullPointerException si votre objet est null.

De cette façon, vous supposez que votre objet est un entier (l'entier encapsulé) et vous le décompressez en un entier.

int est une primitive et ne peut donc pas être stocké en tant que Object; le seul moyen consiste à avoir un int considéré/encadré en tant que Integer puis stocké en tant que Object.


Si votre objet est un String, vous pouvez utiliser la méthode Integer.valueOf() pour le convertir en un simple int:

int i = Integer.valueOf((String) object);

Il peut renvoyer un NumberFormatException si votre objet n'est pas vraiment un String avec un entier comme contenu.


Ressources :

Sur le même sujet:

339
Colin Hebert

En supposant que l'objet est un objet Integer, vous pouvez alors procéder comme suit:

 int i = ((entier) obj) .intValue (); 

Si l'objet n'est pas un objet Integer, vous devez détecter le type et le convertir en fonction de son type.

15
Erick Robertson

Scénario 1: cas simple

S'il est garanti que votre objet est une Integer, procédez comme suit:

int x = (Integer)yourObject;

Scénario 2: n'importe quel objet numérique

En Java, Integer, Long, BigInteger etc. implémentent tous l'interface Number qui utilise une méthode nommée intValue. Tous les autres types personnalisés avec un aspect numérique doivent également implémenter Number (par exemple: Age implements Number). Afin que vous puissiez:

int x = ((Number)yourObject).intValue();

Scénario 3: analyse du texte numérique

Lorsque vous acceptez la saisie de l'utilisateur à partir de la ligne de commande (ou du champ de texte, etc.), vous l'obtenez sous la forme d'une String. Dans ce cas, vous pouvez utiliser Integer.parseInt(String string):

String input = someBuffer.readLine();
int x = Integer.parseInt(input);

Si vous avez entré Object, vous pouvez utiliser (String)input ou, s'il peut avoir un autre type de texte, input.toString():

int x = Integer.parseInt(input.toString());

Scénario 4: hachage d'identité

En Java, il n'y a pas de pointeur. Cependant, Object a une implémentation par défaut semblable à celle du pointeur pour hashCode(), qui est directement disponible via System.identityHashCode(Object o). Afin que vous puissiez:

int x = System.identityHashCode(yourObject);

Notez que ceci est pas une vraie valeur de pointeur. L'adresse mémoire des objets peut être modifiée par la machine virtuelle Java pendant que leurs hachages d'identité sont conservés. En outre, deux objets vivants peuvent avoir la même empreinte numérique.

Vous pouvez également utiliser object.hashCode(), mais il peut s'agir d'un type spécifique.

Scénario 5: index unique

Dans les mêmes cas, vous avez besoin d'un index unique pour chaque objet, comme pour l'auto incrémentation automatique des valeurs d'ID dans une table de base de données (et contrairement au hachage d'identité qui n'est pas unique). Un exemple d'implémentation simple pour cela:

class ObjectIndexer {

    private int index = 0;

    private Map<Object, Integer> map = new WeakHashMap<>();

    public int indexFor(Object object) {
        if (map.containsKey(object)) {
            return map.get(object);
        } else {
            index++;
            map.put(object, index);
            return index;
        }
    }

}

Usage:

ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject);    // 1
int y = indexer.indexFor(new Object());  // 2
int z = indexer.indexFor(yourObject);    // 1

Scénario 6: membre d'énumération

En Java, les membres ne sont pas des entiers mais des objets complets (contrairement à C/C++, par exemple). Il n’est probablement jamais nécessaire de convertir un objet enum en int, mais Java associe automatiquement un numéro d’index à chaque membre enum. Cet index est accessible via Enum.ordinal(), par exemple:

enum Foo { BAR, BAZ, QUX }

// ...

Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1

 enter image description here

11
Dávid Horváth
@Deprecated
public static int toInt(Object obj)
{
    if (obj instanceof String)
    {
         return Integer.parseInt((String) obj);
    } else if (obj instanceof Number)
    {
         return ((Number) obj).intValue();
    } else
    {
         String toString = obj.toString();
         if (toString.matches("-?\d+"))
         {
              return Integer.parseInt(toString);
         }
         throw new IllegalArgumentException("This Object doesn't represent an int");
    }
}

Comme vous pouvez le constater, ce n’est pas un moyen très efficace de le faire. Vous devez simplement être sûr de quel type d'objet vous avez. Puis convertissez-le en int de la bonne manière.

10
Martijn Courteaux

Vous devez le convertir en Integer (classe de wrapper de int). Vous pouvez ensuite utiliser la méthode intValue () d'Integer pour obtenir l'int.

4
Etienne de Martel

Réponse:

int i = ( Integer ) yourObject;

Si votre objet est déjà un entier, il fonctionnera sans à-coups. c'est à dire:

Object yourObject = 1;
//  cast here

ou

Object yourObject = new Integer(1);
//  cast here

etc.

Si votre objet est autre chose, vous devez d'abord le convertir (si possible) en int:

String s = "1";
Object yourObject = Integer.parseInt(s);
//  cast here

Ou

String s = "1";
Object yourObject = Integer.valueOf( s );
//  cast here
4
OscarRyz

J'utilise un one-liner lors du traitement des données de GSON:

int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
3
Someone Somewhere
int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.
2
Kerem Baydoğan

Tu ne peux pas. Une int n'est pas une Object.

Integer est un Object cependant, mais je doute que ce soit ce que vous voulez dire.

2
extraneon

Ne peut pas être fait. Un int n'est pas un objet, c'est un type primitif. Vous pouvez le lancer sur Integer, puis obtenir l'int.

 Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class

 int num = i; //Java 1.5 or higher
2
Tom

Si le Object a été instancié à l'origine sous la forme d'un Integer , vous pouvez le convertir en int à l'aide de l'opérateur de conversion (Subtype).

Object object = new Integer(10);
int i = (Integer) object;

Notez que cela ne fonctionne que si vous utilisez au moins Java 1.5 avec autoboxing feature , sinon vous devez déclarer i comme Integer à la place, puis appeler intValue() dessus.

Mais si, au départ, il n’a pas été créé comme une variable Integer, vous ne pouvez pas le faire de cette façon. Il en résulterait une ClassCastException avec le nom de classe d'origine dans le message. Si la représentation toString() de l'objet obtenue par String#valueOf() désigne un nombre entier syntaxiquement valide (par exemple, chiffres uniquement, avec si nécessaire un signe moins devant), vous pouvez utiliser Integer#valueOf() ou new Integer() pour cela.

Object object = "10";
int i = Integer.valueOf(String.valueOf(object));

Voir également:

2
BalusC

Vous vous demandez peut-être pourquoi C ou C++ vous permet de manipuler un pointeur d'objet comme un nombre, mais vous ne pouvez pas manipuler une référence d'objet en Java de la même manière.

Les références d'objet en Java ne ressemblent pas aux pointeurs en C ou C++ ... Les pointeurs en gros sont entiers et vous pouvez les manipuler comme n'importe quel autre int. Les références sont intentionnellement une abstraction plus concrète et ne peuvent pas être manipulées comme le font les pointeurs.

1
romacafe
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
    ArrayList list = null;
    Statement statement = conn.createStatement();
    ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
    while (result.next()) {
        list.add(result.getInt(1));
    }
    statement.close();
    int id[] = new int[list.size()];
    for (int i = 0; i < id.length; i++) {
        try {
            id[i] = ((Integer) list.get(i)).intValue();
        } catch(NullPointerException ne) {
        } catch(ClassCastException ch) {}
    }
    return id;
}
// enter code here

Ce code montre pourquoi ArrayList est important et pourquoi nous l'utilisons. Convertir simplement int à partir de Object. Peut-être sa utile.

1

Si vous voulez dire transtyper une chaîne en int, utilisez Integer.valueOf("123").

Cependant, vous ne pouvez pas convertir la plupart des autres objets en int, car ils n'auront pas de valeur int. Par exemple. un XmlDocument n'a pas de valeur int.

1
Amy B

Par exemple, variable d'objet; hastaId

Object hastaId = session.getAttribute("hastaID");

Par exemple, convertit un objet en int, hastaID

int hastaID=Integer.parseInt(String.valueOf(hastaId));
1
user4391934

map.getValue () renvoie le type d'objetso divide1 = me.getValue ()/2;

int divide1 = (Integer) me.getValue ()/2;

0
Nehal Pawar

Référez-vous ce code: 

public class sample 
{
  public static void main(String[] args) 
  {
    Object obj=new Object();
    int a=10,b=0;
    obj=a;
    b=(int)obj;

    System.out.println("Object="+obj+"\nB="+b);
  }
}
0
Vishal Tathe