为什么有必要在打印时将枚举元素强制转换为String?

时间:2014-07-09 07:58:45

标签: java string casting enumeration

Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
    String paramName = (String) paramNames.nextElement();
    out.print(paramName);
}

从上面的代码中我不明白为什么需要paramNames.nextElement()到字符串的类型转换。有人可以解释一下吗? 当我从表单传递参数名称时,它已经在String中,那么为什么我们使用(String)

2 个答案:

答案 0 :(得分:4)

Enumeration是泛型类型,通常应与适当的泛型参数一起使用。例如Enumeration String s:

Enumeration<String> paramNames = ...;

这使得nextElement()方法的签名如下所示:

public String nextElement();

他们投放到String的原因是因为如果没有通用参数,编译器会将其视为您输入的内容:

Enumeration<Object>

因此nextElement()的返回类型变为Object,您无法将对象分配给String变量paramName

当然,如果request.getParameterNames()没有返回Enumeration<String>,而只返回Enumeration,那么你就不能做得更好。

答案 1 :(得分:0)

因为paramNameString,所以您告诉编译器相信您知道自己在做什么,而paramNames.nextElement()肯定会返回String。您的代码将编译但在运行时可能会崩溃,如果paramNames.nextElement()将具有无法强制转换为String的类型的对象。请注意,如果您有Enumeration<String>,那么演员阵容就是多余的。