我有一个名为table
的哈希表。类型值为long
。我正在使用.values()
获取值。现在我想访问这些值。
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
但是当我尝试获取它时,它会给我错误,因为我无法从object
类型转换为long
。我怎么能绕过它?
答案 0 :(得分:34)
试试这个:
Long a = (Long)itr.next();
你最终得到一个Long对象但是使用自动装箱你几乎可以像使用原始长一样使用它。
另一种选择是使用泛型:
Iterator<Long> itr = val.iterator();
Long a = itr.next();
答案 1 :(得分:7)
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
Object
至 float
示例 - 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
答案 2 :(得分:4)
尝试:long a = ((Long) itr.next()).longValue();
答案 3 :(得分:3)
您应该使用Java 5中的 new Generics 功能。
当你从一个元素中取出一个元素时 收藏,你必须把它投到 存储在中的元素类型 采集。 除了 不方便,这是不安全的。该 编译器不检查你的演员表 与集合的类型相同, 所以演员阵容可能会在运行时失败。
泛型为您提供了一种方式 传达集合的类型 到编译器,以便它可以 检查。一旦编译器知道了 元素类型的集合, 编译器可以检查你是否使用过 集合一致,可以 在值上插入正确的强制转换 被收集出来。
答案 4 :(得分:1)
在我的情况下,我有一个从Flex客户端获取的对象数组
有时数字可以被java解释为int,有时也可以解释为
所以为了解决这个问题,我使用'toString()'函数,如下所示:
public Object run(Object... args) {
final long uid = Long.valueOf(args[0].toString());
答案 5 :(得分:0)
long value = Long.parseLong((String)request.getAttribute(""));
答案 6 :(得分:0)
我在进行JSP编码时遇到了同样的问题。关于Long和泛型的上述建议要么不起作用,要么不适合代码片段。
我必须像这样解决它(在JSP中):
<%Object y=itr.next(); %>
然后使用我的对象y&lt;%= y%&gt;因为我们会在scriptlet中使用任何其他Java变量。