Невозможно преобразовать из объекта типа в long
У меня есть хэш-таблица с именем table
. Значение типа long
. Я получаю значения с помощью .values()
. Теперь я хочу получить доступ к этим значениям.
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
Но когда я пытаюсь его получить, это дает мне ошибку, потому что я не могу преобразовать из типа object
в long
. Как я могу обойти это?
Ответы
Ответ 1
Попробуйте следующее:
Long a = (Long)itr.next();
В итоге вы получаете объект Long, но с autoboxing вы можете использовать его почти как примитивный длинный.
Другой вариант - использовать Generics:
Iterator<Long> itr = val.iterator();
Long a = itr.next();
Ответ 2
Number
класс может использоваться для преодоления количественного литья данных.
В этом случае может использоваться следующий код:
long a = ((Number)itr.next()).longValue();
Я подготовил следующие примеры:
Object
до long
пример - 1
// preparing the example variables
Long l = new Long("1416313200307");
Object o = l;
// Long casting from an object by using `Number` class
System.out.print(((Number) o).longValue() );
Консоль вывод будет выглядеть следующим образом:
1416313200307
Object
до double
пример - 2
// preparing the example variables
double d = 0.11;
Object o = d;
// Double casting from an Object -that a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");
Консоль вывод будет выглядеть следующим образом:
0.11
Object
до double
пример - 3
Будьте осторожны с этой простой ошибкой! Если значение float преобразуется с помощью функции doubleValue()
, первое значение может быть не равно окончательному значению.
Как показано ниже 0.11
!= 0.10999999940395355
.
// preparing the example variables
float f = 0.11f;
Object o = f;
// Double casting from an Object -that a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");
Консоль вывод будет выглядеть следующим образом:
0.10999999940395355
Object
до float
пример - 4
// preparing the example variables
double f = 0.11;
Object o = f;
// Double casting from an Object -that a float number- by using `Number` class
System.out.print(((Number) o).floatValue() + "\n");
Консоль вывод будет выглядеть следующим образом:
0.11
Ответ 3
Попробуйте: long a = ((Long) itr.next()).longValue();
Ответ 4
Вы должны использовать новые функции Generics на Java 5.
Когда вы берете элемент из Сбор, вы должны отдать его тип элемента, который хранится в коллекция. Кроме того, неудобно, это небезопасно. компилятор не проверяет, что ваш приказ такой же, как тип коллекции, поэтому при запуске может произойти сбой.
Generics предоставляет вам способ сообщать тип коллекции компилятору, чтобы он мог быть проверено. Как только компилятор знает тип элемента коллекции, компилятор может проверить, что вы использовали сбор последовательно и может вставить правильные значения при значениях будучи выведенным из коллекции.
Вы можете прочитать этот быстрый howto или более полный tutorial.
Ответ 5
в моем случае у меня есть массив объектов, которые я получаю от клиента flex,
иногда числа могут быть интерпретированы java как int, а иногда и длинными,
поэтому для решения проблемы я использую функцию 'toString()' следующим образом:
public Object run(Object... args) {
final long uid = Long.valueOf(args[0].toString());
Ответ 6
long value = Long.parseLong((String)request.getAttribute(""));
Ответ 7
У меня возникла такая же проблема, но при использовании JSP-кодирования. Вышеупомянутые предложения относительно Long и generics либо не работали, либо не вписывались в фрагмент кода.
Мне нужно было решить это (в JSP):
<%Object y=itr.next(); %>
а затем используйте my Object y like <% = y% > , поскольку мы будем использовать любую другую переменную Java в скриптлете.