Сценарий 1: простой случай
Если гарантируется, что ваш объект - Integer
, это простой способ:
int x = (Integer)yourObject;
Сценарий 2: любой числовой объект
В Java Integer
, Long
, BigInteger
и т. Д. Все они реализуют интерфейс Number
, который имеет метод с именем intValue
. Любые другие пользовательские типы с числовым аспектом также должны реализовывать Number
(например: Age implements Number
). Так что вы можете:
int x = ((Number)yourObject).intValue();
Сценарий 3: анализ числового текста
Когда вы принимаете пользовательский ввод из командной строки (или текстового поля и т. Д.), Вы получаете его как String
. В этом случае вы можете использовать Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Если вы получаете ввод как Object
, вы можете использовать (String)input
или, если он может иметь другой текстовый тип, input.toString()
:
int x = Integer.parseInt(input.toString());
Сценарий 4: хэш удостоверения личности
В Java нет указателей. Однако Object
имеет реализацию, аналогичную указателю по умолчанию для hashCode()
, которая доступна напрямую через System.identityHashCode(Object o)
. Так что вы можете:
int x = System.identityHashCode(yourObject);
Обратите внимание, что это не реальное значение указателя. Адрес памяти объектов может быть изменен JVM, пока хранятся их идентификаторы. Кроме того, два живых объекта могут иметь одинаковый хеш-идентификатор.
Вы также можете использовать object.hashCode()
, но это может быть тип конкретного.
Сценарий 5: уникальный индекс
В тех же случаях вам необходим уникальный индекс для каждого объекта, например, для автоматического увеличения значений идентификаторов в таблице базы данных (и в отличие от идентификатора, который не является уникальным). Простой пример реализации для этого:
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;
}
}
}
Использование:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Сценарий 6: enum member
В Java члены перечисления не являются целыми числами, а являются полнофункциональными объектами (в отличие, например, от C / C ++). Вероятно, никогда не требуется преобразовывать объект enum в int
, однако Java автоматически назначает индексный номер каждому члену enum. К этому индексу можно получить доступ через Enum.ordinal()
, например:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1