Java: Estrategia para limitar el alcance de una variable

Chris01:

Me tropecé sobre un error y me preguntaba si hay una mejor manera de no hacerlo.

Primero tuve este código.

// read lines out of a file and do something with it in foo
BufferedReader br = new BufferedReader (new FileReader ("bla.txt")); 
String line; 
while ((line = br.readLine ()) != null) 
{
  foo (line);
}
br.close ();

Luego lo cambié. Introdujo una lista en lugar de trabajar en la lectura de circuito.

BufferedReader br = new BufferedReader (new FileReader ("bla.txt")); 
List <String> lst = new ArrayList <String> ();
String line; 
while ((line = br.readLine ()) != null) 
{
  lst.add (line);
}
br.close ();
for (String s : lst)
{
  foo (line);   // !!!
}

Por favor, ignora el hecho de que no es una verdadera optimización. El código es sólo una simplificación para mi pregunta.

En el uso de la colección que hice un error. Hice foo keep (línea) instaed de foo (s). Eso es sin error del compilador, pero mal para mi algoritmo.

¿Cuál es una buena estrategia para evitar este problema si lo que es más modular (usando funciones, etc.) no es adecuada exploración?

Me vestuario acerca de limitar el alcance de la línea poniéndolo en un bloque.

BufferedReader br = new BufferedReader (new FileReader ("bla.txt")); 
List <String> lst = new ArrayList <String> ();

{
  String line; 
  while ((line = br.readLine ()) != null) 
  {
    lst.add (line);
  }
  br.close ();
}

for (String s : lst)
{
  foo (line);   // error now
}

Pero no estoy seguro de que eso es una buena estrategia y comunes. ¿Alguna sugerencia para ese tipo de problema? ¡Gracias!

Aaron:

Otra solución específica para su código de ejemplo: se puede declarar variables en un comunicado de inicialización del bucle que sólo se podrá acceder en el cuerpo del bucle.

for (String line=br.readLine(); line != null ; line = br.readLine()) {
    //line is accessible
}
// line is undeclared

Cada whilebucle se puede convertir en un forbucle, pero el bucle resultante podría a menudo ser confuso, por lo comentar profusamente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315057&siteId=1
Recomendado
Clasificación