Por que tenho que fazer cast quando atribuo o método nextElement() da classe Enumeration?[RESO]

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();
	}

O motivo é que o seu Enumeration não foi declarado usando o type String.

Ou seja, o compilador não consegue fazer o cast automaticamente para você. Tente algo assim:

Enumeration&lt;String&gt; e = request.getParameterNames();
// ...
String param = e.nextElement();

Entendi.
Valeu cara!