无法从类型对象转换为long

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

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

但是当我试图得到它时,它会给我错误,因为我无法从类型object转换为long 。 我怎么能绕过它呢?

尝试这个:

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

你最终得到一个Long对象,但是使用自动装箱你可能会使用它几乎像一个原始的长。

另一种选择是使用generics:

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

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's a float number- by using `Number` class System.out.print(((Number) o).doubleValue() + "\n"); 

控制台输出将是:

 0.11 

Object double 示例 – 3

这个简单的错误要小心! 如果使用doubleValue()函数转换浮点值,则第一个值可能不等于最终值。
如下图所示0.11 != 0.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 

float Object 示例 – 4

 // 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 

尝试: long a = ((Long) itr.next()).longValue();

您应该使用Java 5中的 Genericsfunction。

从集合中取出元素时,必须将其强制转换为集合中存储的元素类型。 除了不方便之外,这是不安全的 。 编译器不会检查您的强制转换是否与集合的类型相同,因此强制转换可能会在运行时失败。

generics提供了一种将集合类型传递给编译器的方法,以便可以检查它。 一旦编译器知道集合的元素类型,编译器就可以检查您是否一直使用了集合,并且可以对从集合中取出的值插入正确的强制转换。

您可以阅读本快速指南或更完整的教程 。

在我的情况下,我有一个从Flex客户端获得的对象数组,

有时这些数字可以被java解释为int,有时甚至长,

所以要解决这个问题我使用’toString()’函数如下:

 public Object run(Object... args) { final long uid = Long.valueOf(args[0].toString()); 
 long value = Long.parseLong((String)request.getAttribute("")); 

我在面对同样的问题但是在进行JSP编码时。 关于Long和generics的上述建议要么不起作用,要么不适合代码片段。

我必须这样解决它(在JSP中):

 <%Object y=itr.next(); %> 

然后使用我的对象y,如<%= y%>,因为我们将在scriptlet中使用任何其他Java变量。