it-swarm.com.ru

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

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

182
Sheehan Alam

Если вы уверены, что этот объект является 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:

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

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


Ресурсы :

По той же теме:

339
Colin Hebert

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

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

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

15
Erick Robertson

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

Обратите внимание, что это not реальное значение указателя. Адрес памяти объектов может быть изменен 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

 enter image description here

11
Dávid Horváth
@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 правильным способом.

10
Martijn Courteaux

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

4
Etienne de Martel

Ответ:

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
4
OscarRyz

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

int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
3
Someone Somewhere
int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.
2
Kerem Baydoğan

Ты не можешь int не является Object.

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

2
extraneon

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

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

 int num = i; //Java 1.5 or higher
2
Tom

Если Object изначально был создан как Integer , то вы можете уменьшить его до int, используя оператор приведения (Subtype).

Object object = new Integer(10);
int i = (Integer) object;

Обратите внимание, что это работает только тогда, когда вы используете по крайней мере Java 1.5 с функцией автобокса , в противном случае вы должны объявить i как Integer и затем вызвать intValue() для него.

Но если изначально он вообще не был создан как Integer, то вы не можете так унывать. Это привело бы к ClassCastException с оригинальным именем класса в сообщении. Если объект toString() представление, полученное с помощью String#valueOf() обозначает синтаксически допустимое целое число (например, только цифры, если необходимо, со знаком минус впереди), тогда вы можете использовать Integer#valueOf() или new Integer() для этого.

Object object = "10";
int i = Integer.valueOf(String.valueOf(object));

Смотрите также:

2
BalusC

Я думаю, вы задаетесь вопросом, почему C или C++ позволяют вам манипулировать указателем объекта, как числом, но вы не можете манипулировать ссылкой на объект в Java таким же образом.

Ссылки на объекты в Java не похожи на указатели в C или C++ ... Указатели в основном являются целыми числами, и вы можете манипулировать ими, как и любой другой int. Ссылки намеренно представляют собой более конкретную абстракцию и не могут управляться так, как указатели.

1
romacafe
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
    ArrayList list = null;
    Statement statement = conn.createStatement();
    ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
    while (result.next()) {
        list.add(result.getInt(1));
    }
    statement.close();
    int id[] = new int[list.size()];
    for (int i = 0; i < id.length; i++) {
        try {
            id[i] = ((Integer) list.get(i)).intValue();
        } catch(NullPointerException ne) {
        } catch(ClassCastException ch) {}
    }
    return id;
}
// enter code here

Этот код показывает, почему ArrayList важен и почему мы его используем. Просто приведение int из Object. Может быть, это полезно.

1
Mahbubur Rahman Khan

Если вы имеете в виду приведение String к int, используйте Integer.valueOf("123").

Вы не можете привести большинство других Объектов к int, потому что они не будут иметь значения int. Например. XmlDocument не имеет значения int.

1
Amy B

Переменная объекта примера; hastaId

Object hastaId = session.getAttribute("hastaID");

Например, приведение объекта к int, hastaID

int hastaID=Integer.parseInt(String.valueOf(hastaId));
1
user4391934

map.getValue () возвращает тип объекта sodiv1 = me.getValue ()/2;

int div1 = (Integer) me.getValue ()/2;

0
Nehal Pawar

См. Этот код: 

public class sample 
{
  public static void main(String[] args) 
  {
    Object obj=new Object();
    int a=10,b=0;
    obj=a;
    b=(int)obj;

    System.out.println("Object="+obj+"\nB="+b);
  }
}
0
Vishal Tathe