无法从类型对象转换为长型对象

2022-09-03 03:34:19

我有一个名为 的哈希表。类型值为 。我正在使用 获取值。现在我想访问这些值。tablelong.values()

Collection val = table.values();

Iterator itr = val.iterator();
long a  =   (long)itr.next();

但是当我尝试获取它时,它会给我错误,因为我无法从类型转换为.我该如何绕过它?objectlong


答案 1

试试这个:

  Long a = (Long)itr.next();

你最终会得到一个 Long 对象,但通过自动装箱,你可以像使用原始 long 一样使用它。

另一种选择是使用泛型:

  Iterator<Long> itr = val.iterator();
  Long a = itr.next();

答案 2

Number类可用于克服数值数据类型转换。

在这种情况下,可以使用以下代码:

long a = ((Number)itr.next()).longValue();



我准备了下面的例子:

例子 - 1Objectlong

// 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 示例 - 2double

// preparing the example variables
double d = 0.11;
Object o = d;

// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");

控制台输出将为:

0.11



Object 举个例子 - 3

小心这个简单的错误!如果使用函数转换浮点值,则第一个值可能不等于最终值。
如下所示 != 。doubledoubleValue()0.110.10999999940395355

// preparing the example variables
float f = 0.11f;
Object o = f;

// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).doubleValue() + "\n");

控制台输出将为:

0.10999999940395355



Object 示例 - 4float

// preparing the example variables
double f = 0.11;
Object o = f;

// Double casting from an Object -that's a float number- by using `Number` class
System.out.print(((Number) o).floatValue() + "\n");

控制台输出将为:

0.11