Scénario 1: cas simple
S'il est garanti que votre objet est un Integer
, voici le moyen simple:
int x = (Integer)yourObject;
Scénario 2: tout objet numérique
En Java Integer
, Long
, BigInteger
etc. mettre en œuvre toute l' Number
interface qui a une méthode nommée intValue
. Tout autre type personnalisé avec un aspect numérique doit également être implémenté Number
(par exemple:) Age implements Number
. Afin que vous puissiez:
int x = ((Number)yourObject).intValue();
Scénario 3: analyser du texte numérique
Lorsque vous acceptez l'entrée utilisateur à partir de la ligne de commande (ou du champ de texte, etc.), vous l'obtenez en tant que String
. Dans ce cas, vous pouvez utiliser Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Si vous obtenez l' entrée comme Object
, vous pouvez utiliser (String)input
, ou, si elle peut avoir un autre type textuel, input.toString()
:
int x = Integer.parseInt(input.toString());
Scénario 4: hachage d'identité
En Java, il n'y a pas de pointeurs. Cependant, Object
a une implémentation par défaut de type pointeur pour hashCode()
, qui est directement disponible via System.identityHashCode(Object o)
. Afin que vous puissiez:
int x = System.identityHashCode(yourObject);
Notez que ce n'est pas une vraie valeur de pointeur. L'adresse mémoire des objets peut être modifiée par la JVM pendant que leurs hachages d'identité sont conservés. De plus, deux objets vivants peuvent avoir le même hachage d'identité.
Vous pouvez également l'utiliser object.hashCode()
, mais il peut être spécifique au type.
Scénario 5: index unique
Dans les mêmes cas, vous avez besoin d'un index unique pour chaque objet, comme pour les valeurs d'ID incrémentées automatiquement 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 enum
En Java, les membres enum 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
Object
n'est pas le casInteger
, je ne sais pas ce que vous attendez de votre casting.