Как привести Объект к int - PullRequest
       29

Как привести Объект к int

196 голосов
/ 07 сентября 2010

Как я могу привести Объект к int в Java?

Ответы [ 18 ]

351 голосов
/ 07 сентября 2010

Если вы уверены, что этот объект является Integer:

int i = (Integer) object;

Или, начиная с Java 7, вы можете эквивалентно написать:

int i = (int) object;

Осторожно, он может выдать ClassCastException, если ваш объект не является Integer и NullPointerException, если ваш объект null.

Таким образом, вы предполагаете, что ваш объект является целым числом (обернутый int), и вы распаковываете его в int.

int является примитивом, поэтому его нельзя сохранить как Object, единственный способ состоит в том, чтобы int считался / помечен как Integer, а затем сохранялся как Object.


Если ваш объект String, то вы можете использовать метод Integer.valueOf(), чтобы преобразовать его в простое целое:

int i = Integer.valueOf((String) object);

Может выдать NumberFormatException, если ваш объект на самом деле не String с целым числом в качестве содержимого.


Ресурсы:

На ту же тему:

17 голосов
/ 07 сентября 2010

Предполагая, что объект является Integer объектом, вы можете сделать это:

int i = ((Integer) obj).intValue();

Если объект не является Integer объектом, то вы должны определить тип и преобразовать егов зависимости от его типа.

11 голосов
/ 16 октября 2015

Сценарий 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

enter image description here

11 голосов
/ 07 сентября 2010
@Deprecated
public static int toInt(Object obj)
{
    if (obj instanceof String)
    {
         return Integer.parseInt((String) obj);
    } else if (obj instanceof Number)
    {
         return ((Number) obj).intValue();
    } else
    {
         String toString = obj.toString();
         if (toString.matches("-?\d+"))
         {
              return Integer.parseInt(toString);
         }
         throw new IllegalArgumentException("This Object doesn't represent an int");
    }
}

Как видите, это не очень эффективный способ сделать это. Вы просто должны быть уверены, какой у вас объект. Затем преобразуйте его в int правильным способом.

4 голосов
/ 07 сентября 2010

Вы должны привести его к Integer (классу-оболочке int). Затем вы можете использовать метод Integer intValue () для получения внутреннего целого.

4 голосов
/ 07 сентября 2010

Ответ:

int i = ( Integer ) yourObject;

Если ваш объект уже является целым числом, он будет работать гладко. то есть:

Object yourObject = 1;
//  cast here

или

Object yourObject = new Integer(1);
//  cast here

и т.д.

Если ваш объект является чем-то еще, вам нужно сначала преобразовать его (если возможно) в int:

String s = "1";
Object yourObject = Integer.parseInt(s);
//  cast here

Или

String s = "1";
Object yourObject = Integer.valueOf( s );
//  cast here
3 голосов
/ 13 декабря 2013

Я использую однострочник при обработке данных от GSON:

int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
2 голосов
/ 07 сентября 2010

Вы не можете. int не является Object.

Integer хотя и Object, но я сомневаюсь, что вы это имеете в виду.

2 голосов
/ 07 сентября 2010

Не может быть сделано. int - это не объект, это примитивный тип. Вы можете привести его к Integer, а затем получить int.

 Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class

 int num = i; //Java 1.5 or higher
2 голосов
/ 07 сентября 2010
int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.
...