无法从类型对象转换为long

时间:2010-02-28 13:41:53

标签: java casting types long-integer

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

Collection val = table.values();

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

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

7 个答案:

答案 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 功能。

  

当你从一个元素中取出一个元素时   收藏,你必须把它投到   存储在中的元素类型   采集。 除了   不方便,这是不安全的。该   编译器不检查你的演员表   与集合的类型相同,   所以演员阵容可能会在运行时失败。

     

泛型为您提供了一种方式   传达集合的类型   到编译器,以便它可以   检查。一旦编译器知道了   元素类型的集合,   编译器可以检查你是否使用过   集合一致,可以   在值上插入正确的强制转换   被收集出来。

您可以快速阅读howto或更完整tutorial

答案 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变量。