Як я можу закинути об’єкт до 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
, я не впевнений, що ви очікуєте від своєї ролі.