【发布时间】:2016-08-10 09:56:12
【问题描述】:
我正在尝试使用向量并编写了一个简单的代码来通过枚举访问其元素。
Vector v = new Vector();
v.add("Some String");
v.add(10);
Enumeration e = v.elements();
while(e.hasMoreElements()) System.out.println(e.nextElement());
使用原始类型会产生预期的结果(打印元素)。但是,当我使用泛型类型的枚举器时,它会变得很棘手。
以String作为类型参数:
Vector v = new Vector();
v.add("Some String");
v.add(10);
Enumeration<String> e = v.elements();
while(e.hasMoreElements()) System.out.println(e.nextElement());
输出:
一些字符串
线程“main”java.lang.ClassCastException 中的异常:java.lang.Integer 无法转换为 java.lang.String
以整数作为类型参数:
Vector v = new Vector();
v.add("Some String");
v.add(10);
Enumeration<Integer> e = v.elements();
while(e.hasMoreElements()) System.out.println(e.nextElement());
输出:
一些字符串
10
这里发生了什么? 这两种情况都不应该产生ClassCast异常吗?
【问题讨论】:
-
Enumeration<> e = v.elements();这是怎么编译的? -
@KonstantinYovkov 我认为这是一个错字,OP的意思是
Enumeration<String>。 -
你正在使用
Vector原始类型:stackoverflow.com/a/2770692/1608594 你不应该使用原始类型。
标签: java generics vector enumeration