Olá
1 - Uma enumeração pode ser criada de duas apenas com as constantes ou com as constantes e seus valores que são passados pelo construtor da própria classe enumeração, esses valores podem ser de qualquer tipo aceito pelo java.
2 - O objeto HttpServletRequest encapsula os nomes e valores de uma requisição http. Os nomes são strings como um campo de formulário que o name é uma string.
3 - O método getParameterNames() retorna uma enumeração com os nomes dos parâmetros enviados. Esses nomes são strings conforme o item 2.
A dúvida é: se os nomes dos parâmetros da requisição são strings, eu criei uma enumeração de strings, então por que eu tenho que fazer um cast sempre que eu atribuo a uma variável do tipo string o próximo elemento de uma enumeração usando o método nextElement()?
Código para contextualizar:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration e = request.getParameterNames();
String html = "<html><head>" +
"<title>Varrendo todos os campos de um formulário</title>" +
"</head>" +
"<body>" +
"<h2>Dados cadastrados:</h2>";
while(e.hasMoreElements()) {
String param = (String) e.nextElement();
html += "<strong>" + param + ": </strong>" +
request.getParameter(param) + "<br />";
}
html += "</body></html>";
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(html);
out.close();
}