无法从类型对象转换为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变量。