Scenario 1: caso semplice
Se è garantito che il tuo oggetto è un Integer
, questo è il modo semplice:
int x = (Integer)yourObject;
Scenario 2: qualsiasi oggetto numerico
In Java Integer
, Long
, BigInteger
ecc tutti implementano l' Number
interfaccia che ha un metodo chiamato intValue
. Dovrebbero essere implementati anche altri tipi personalizzati con un aspetto numerico Number
(ad esempio:) Age implements Number
. Così puoi:
int x = ((Number)yourObject).intValue();
Scenario 3: analizzare il testo numerico
Quando si accetta l'input dell'utente dalla riga di comando (o campo di testo, ecc.), Si ottiene come String
. In questo caso puoi usare Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Se si ottiene input come Object
, è possibile utilizzare (String)input
, o, se si può avere un altro tipo testuale, input.toString()
:
int x = Integer.parseInt(input.toString());
Scenario 4: hash identità
In Java non ci sono puntatori. Tuttavia Object
ha un'implementazione predefinita simile a un puntatore per hashCode()
, che è direttamente disponibile tramite System.identityHashCode(Object o)
. Così puoi:
int x = System.identityHashCode(yourObject);
Si noti che questo non è un vero valore del puntatore. L'indirizzo di memoria degli oggetti può essere modificato dalla JVM mentre gli hash delle loro identità vengono mantenuti. Inoltre, due oggetti viventi possono avere lo stesso hash identitario.
Puoi anche usare object.hashCode()
, ma può essere specifico per tipo.
Scenario 5: indice univoco
Negli stessi casi è necessario un indice univoco per ciascun oggetto, ad esempio per incrementare automaticamente i valori ID in una tabella del database (e diversamente dall'hash dell'identità che non è univoco). Una semplice implementazione di esempio per questo:
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;
}
}
}
Uso:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Scenario 6: membro enum
In Java i membri enum non sono numeri interi ma oggetti con funzionalità complete (a differenza di C / C ++, ad esempio). Probabilmente non è mai necessario convertire un oggetto enum in int
, tuttavia Java associa automaticamente un numero indice a ciascun membro enum. È possibile accedere a questo indice tramite Enum.ordinal()
, ad esempio:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
èInteger
, non sono sicuro di cosa ti aspetti dal tuo cast.