为什么打印时需要将枚举元素转换为字符串?

use*_*162 4 java string enumeration casting

Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
    String paramName = (String) paramNames.nextElement();
    out.print(paramName);
}
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*urn 5

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

Enumeration<String> paramNames = ...;
Run Code Online (Sandbox Code Playgroud)

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

public String nextElement();
Run Code Online (Sandbox Code Playgroud)

它们转换为 a 的原因String是因为如果没有泛型参数,编译器会将其视为您键入的内容:

Enumeration<Object>
Run Code Online (Sandbox Code Playgroud)

所以 的返回类型nextElement()就变成了Object,并且你不能只将一个对象赋给String变量paramName

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