Scenariusz 1: prosty przypadek
Jeśli masz pewność, że twój obiekt jest Integer
, to jest to prosty sposób:
int x = (Integer)yourObject;
Scenariusz 2: dowolny obiekt numeryczny
W Javie Integer
, Long
, BigInteger
itd. Wszystko zaimplementować Number
interfejs, który ma metodę nazwie intValue
. Wszelkie inne niestandardowe typy o aspekcie liczbowym również powinny implementować Number
(na przykład Age implements Number
:). Więc możesz:
int x = ((Number)yourObject).intValue();
Scenariusz 3: parsowanie tekstu numerycznego
Gdy zaakceptujesz dane wprowadzone z linii poleceń (lub pola tekstowego itp.), Otrzymasz je jako String
. W takim przypadku możesz użyć Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Jeśli otrzymasz dane wejściowe jako Object
, możesz użyć (String)input
lub, jeśli może mieć inny typ tekstu input.toString()
:
int x = Integer.parseInt(input.toString());
Scenariusz 4: skrót tożsamości
W Javie nie ma wskaźników. Object
Ma jednak domyślną implementację przypominającą wskaźnik dla hashCode()
, która jest bezpośrednio dostępna za pośrednictwem System.identityHashCode(Object o)
. Więc możesz:
int x = System.identityHashCode(yourObject);
Zauważ, że to nie jest prawdziwa wartość wskaźnika. Adres pamięci obiektów może być zmieniany przez JVM, podczas gdy utrzymywane są skróty tożsamości. Ponadto dwa żywe obiekty mogą mieć ten sam skrót tożsamości.
Możesz także użyć object.hashCode()
, ale może on być specyficzny dla typu.
Scenariusz 5: unikalny indeks
W tych samych przypadkach potrzebny jest unikalny indeks dla każdego obiektu, na przykład automatyczne zwiększenie wartości identyfikatora w tabeli bazy danych (w przeciwieństwie do skrótu tożsamości, który nie jest unikalny). Prosta przykładowa implementacja do tego:
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;
}
}
}
Stosowanie:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Scenariusz 6: członek enum
W Java enum członkowie nie są liczbami całkowitymi, ale pełnymi obiektami (na przykład w przeciwieństwie do C / C ++). Prawdopodobnie nigdy nie ma potrzeby konwertowania obiektu wyliczeniowego int
, jednak Java automatycznie przypisuje numer indeksu do każdego elementu wyliczeniowego. Dostęp do tego indeksu można uzyskać Enum.ordinal()
na przykład:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
nie jestInteger
, nie jestem pewien, czego oczekujesz od swojej obsady.