Сценарий 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
В Java члены перечисления - не целые числа, а полнофункциональные объекты (в отличие, например, от C / C ++). Вероятно, никогда не требуется преобразовывать объект перечисления int
, однако Java автоматически назначает индексный номер каждому члену перечисления. К этому индексу можно получить доступ Enum.ordinal()
, например, через:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
это не такInteger
, я не уверен, что вы ожидаете от своего состава.