Java:在Iterator上抛出忽略整数,但字符串类型为

时间:2016-06-14 16:00:20

标签: java string iterator integer classcastexception

有人可以向我解释为什么Java忽略除String类之外的所有对象类型上的迭代器的强制转换?

我有以下代码:

List list = new LinkedList();
list.add(new Object());
list.add(new String("First"));
list.add(10);
list.add(2.3);

我有两个案例:

1)

Iterator<Integer> crunchifyIterator = list.iterator();
while (crunchifyIterator.hasNext()) {
    System.out.println((crunchifyIterator.next()));
}

结果是:

  

java.lang.Object@2a139a55
  首先
  10个
  2.3

2)

Iterator<String> crunchifyIterator = list.iterator();
while (crunchifyIterator.hasNext()) {
    System.out.println((crunchifyIterator.next()));
}

结果是:

  

线程中的异常&#34; main&#34; java.lang.ClassCastException:   java.lang.Object无法强制转换为java.lang.String

我不知道原因是什么。

1 个答案:

答案 0 :(得分:6)

System.out.println()

有多个版本

您要将不同类型的Objects添加到列表

List list = new LinkedList();
list.add(new Object()); // Type Object
list.add(new String("First")); // Type String
list.add(10);  // Type Integer (not int)
list.add(2.3); // Type Float (not float)

在第一个循环中,它调用

System.out.println(Object o);  // String, Interger, Float are all objects this causes no issues

在第二个循环中调用

System.out.println(String str);  // This is where the casting fails, Object, Integer, and Float are not Strings.

原因是运算符重载调用的版本是在编译时确定的(不是运行时)。

注意:

实际上,除了List的泛型类型之外,不应该在迭代器上使用泛型类型。在您的情况下,类型默认为对象。