Як я можу закинути об’єкт до int в java?
intValue), створити конструктор для перерахунку, який задає intValue, щоб константи enum викликали цей конструктор, і додати getter для intValue. Потім замість кастингу зателефонуйте геттеру.
Як я можу закинути об’єкт до int в java?
intValue), створити конструктор для перерахунку, який задає intValue, щоб константи enum викликали цей конструктор, і додати getter для intValue. Потім замість кастингу зателефонуйте геттеру.
Відповіді:
Якщо ви впевнені, що цей об'єкт є 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є цілим числом як вміст.
Ресурси:
На цю ж тему:
NullPointerExceptionВідбуватиметься під час розпакування з Integerвint
Якщо припустити, що об’єкт є Integerоб'єктом, то ви можете це зробити:
int i = ((Integer) obj) .intValue ();
Якщо об’єкт не є Integerоб’єктом, то вам доведеться виявити тип і перетворити його на основі його типу.
intValueна автобоксинг, це буде викликати його за вас.
intValueнабагато зрозуміліше, особливо враховуючи плутанину початківця між intвзаємозамінними Integer.
Якщо гарантовано, що ваш об’єкт є Integer, це простий спосіб:
int x = (Integer)yourObject;
В Java Integer, Long, і BigIntegerт.д. все реалізувати Numberінтерфейс , який має метод з ім'ям intValue. Будь-які інші користувацькі типи з числовим аспектом також повинні реалізовуватись Number(наприклад Age implements Number:). Тож ви можете:
int x = ((Number)yourObject).intValue();
Коли ви приймаєте введення користувача з командного рядка (або текстового поля тощо), ви отримуєте це як a 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());
У Java немає покажчиків. Однак Objectмає за замовчуванням реалізацію за замовчуванням hashCode(), яка безпосередньо доступна через System.identityHashCode(Object o). Тож ви можете:
int x = System.identityHashCode(yourObject);
Зауважте, що це не реальне значення вказівника. Адресу пам'яті об'єктів можна змінити JVM, поки зберігаються хеші ідентичності. Також два живі об’єкти можуть мати однаковий хеш ідентичності.
Ви також можете використовувати object.hashCode(), але це може бути типовим.
У тих же випадках вам потрібен унікальний індекс для кожного об'єкта, як-от для автоматичного збільшення значень ідентифікатора в таблиці бази даних (і на відміну від хеша ідентичності, який не є унікальним). Проста реалізація зразка для цього:
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
У Java enum учасники не цілі числа, а повнофункціональні об'єкти (наприклад, на відміну від C / C ++). Можливо, ніколи не потрібно перетворювати об’єкт enum int, однак Java автоматично прив'язує номер індексу до кожного члена enum. Доступ до цього індексу можна Enum.ordinal(), наприклад:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
@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 правильним шляхом.
Ви повинні передавати його цілому (класу обгортки int). Потім можна використовувати метод intValue () Integer для отримання внутрішнього int.
Відповідь:
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
Я використовую однолінійку при обробці даних з GSON:
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
Якщо 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));
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
Неможливо зробити. А intне об’єкт, це примітивний тип. Ви можете віддати це до Integer, а потім отримати int.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Ви не можете. Ан intне є Object.
Integerце Objectхоча, але я сумніваюся, що це ви маєте на увазі.
Якщо ви маєте на увазі присвоєння рядка до int, використовуйте Integer.valueOf("123").
Не можна передавати більшість інших об'єктів до int, оскільки вони не мають значення int. Наприклад, XmlDocument не має значення int.
Integer.valueOf("123")якщо все, що вам потрібно, це примітив, а використовуйте, Integer.parseInt("123")оскільки метод valueOf викликає непотрібне розпакування.
Напевно, вам цікаво, чому C або C ++ дозволяє вам маніпулювати вказівником об'єкта, як число, але ви не можете маніпулювати посиланням на об'єкт у Java так само.
Посилання на об'єкти в Java не схожі на покажчики на C або C ++ ... Покажчики в основному є цілими числами, і ви можете ними маніпулювати, як і будь-який інший int. Посилання є навмисно більш конкретною абстракцією і не може ними маніпулювати так, як можуть вказувати покажчики.
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. Може бути корисною.
Для прикладної змінної об'єкта; hastaId
Object hastaId = session.getAttribute("hastaID");
Наприклад, прикиньте об'єкт до int,hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
Нарешті, була знайдена найкраща реалізація для вашої специфікації.
public int tellMyNumber(Object any) {
return 42;
}
спочатку перевірте ключове слово instanceof. якщо правда, тоді киньте його.
Objectце не такInteger, я не впевнений, що ви очікуєте від своєї ролі.