Cenário 1: caso simples
Se é garantido que seu objeto é um Integer
, esta é a maneira mais simples:
int x = (Integer)yourObject;
Cenário 2: qualquer objeto numérico
Em Java Integer
, etc Long
, BigInteger
todos implementam a Number
interface que possui um método chamado intValue
. Quaisquer outros tipos personalizados com aspecto numérico também devem ser implementados Number
(por exemplo Age implements Number
:). Então você pode:
int x = ((Number)yourObject).intValue();
Cenário 3: analisar texto numérico
Ao aceitar a entrada do usuário na linha de comando (ou no campo de texto etc.), você a obtém como a String
. Nesse caso, você pode usar Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Se você receber de entrada como Object
, você pode usar (String)input
, ou, se ele pode ter um outro tipo textual, input.toString()
:
int x = Integer.parseInt(input.toString());
Cenário 4: hash de identidade
Em Java, não há ponteiros. No entanto, Object
possui uma implementação padrão do tipo ponteiro para hashCode()
, que está diretamente disponível via System.identityHashCode(Object o)
. Então você pode:
int x = System.identityHashCode(yourObject);
Observe que esse não é um valor real do ponteiro. O endereço de memória dos objetos pode ser alterado pela JVM enquanto seus hashes de identidade estão sendo mantidos. Além disso, dois objetos vivos podem ter o mesmo hash de identidade.
Você também pode usar object.hashCode()
, mas pode ser específico do tipo.
Cenário 5: índice exclusivo
Nos mesmos casos, você precisa de um índice exclusivo para cada objeto, como auto-incrementar valores de ID em uma tabela de banco de dados (e diferente do hash de identidade que não é exclusivo). Uma implementação de amostra simples para isso:
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
Cenário 6: membro da enumeração
No Java enum, os membros não são números inteiros, mas objetos com recursos completos (ao contrário do C / C ++, por exemplo). Provavelmente, nunca é necessário converter um objeto enum int
, no entanto, o Java associa automaticamente um número de índice a cada membro da enum. Este índice pode ser acessado via Enum.ordinal()
, por exemplo:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
não forInteger
, não tenho certeza do que você espera do seu elenco.