El siguiente código no se compila porque la variable 'rt' no se ha inicializado.
Quiero que el código inicialice 'rt' en la declaración de cambio, o que ya no use 'rt' cuando se ejecuta el caso predeterminado.
Aquí está el código que he escrito:
enum RequestType {leader, candidate}; private void processRequest(String input) { boolean inputOK = true; RequestType rt; String[] split = input.split(":"); if (!input.contains(":")) { inputOK = false; } else { if (split.length != 3) { inputOK = false; } else { int port = Integer.parseInt(split[2]); if (!(port > 0 && port < 65537)) { inputOK = false; } else { switch (split[0]) { case "Leader": rt = RequestType.leader; break; case "Candidate": rt = RequestType.candidate; break; default: inputOK = false; } } } } if (!inputOK) { return; } String address = split[1].concat(split[2]); if (rt == RequestType.leader) { keepingLeader(address); }No inicializa rt en el bloque predeterminado, o muchos de los ifs.
El compilador no analiza si la lectura de rt es accesible con respecto al valor de inputOK , solo analiza si es accesible en absoluto.
Lo más fácil de hacer es regresar inmediatamente donde actualmente tiene inputOK = false; .
Alternativamente, puede asignar un valor predeterminado a rt , por ejemplo, null , cuando lo declara. El problema con eso es que rompe la verificación que el compilador está haciendo ahora, que realmente lo ha asignado en todas las circunstancias, por lo que no usa accidentalmente el valor predeterminado.
En su lugar, puede usar la nulidad de rt en lugar de tener un valor booleano separado:
inputOK = false , asigne rt = null en su lugar;!inputOK y regresa si es verdadero, marque rt == null en su lugar.