Mientras yo estaba tratando de hacer algo especial en bucle for me di cuenta de que Java no parece como poner un anónimo de la matriz de la derecha como el origen de un para-cada-loop:

for (String crt : {"a","b","c"} ) {
    doSomething();
}

realmente no funciona mientras

String[] arr = {"a","b","c"};
for (String crt : arr ) {
    doSomething();
}

hace.

Incluso la fundición de la matriz de String[] no ayuda. Al mover el cursor sobre la primera versión, eclipse me dice:

Type mismatch: cannot convert from String[] to String mientras que el significado de «crt».

Es esto un error?

4 Comentarios

  1. 66

    Esto va a funcionar:

    for (String crt : new String[]{"a","b","c"} ) {
        doSomething();
    }
  2. 20

    El lenguaje Java proporciona la {"a","b","c"} forma como un acceso directo, pero sólo es posible durante la asignación. Es posible que esto es para evitar posibles ambigüedades durante el análisis, en algunas posiciones {} podría ser interpretado como un bloque de código.

    La manera correcta de hacerlo sería cómo noé sugiere, con new String[]{"a","b","c"}.

    • Ten en cuenta que el breve formulario que no está permitido en todas las tareas. Solo está permitido en las inicializaciones.
    • hecho interesante. Esta bastante resuelve mi pregunta, gracias por señalándolo. @Tom Castillo: +1 Buena respuesta
  3. 4

    No sé, lo que acerca de esto? 🙂 Lástima que no hay una versión sucinta. Supongamos que usted podría utilizar Groovy o Scala si quería nada de eso 🙂

    for (String s : Arrays.asList("a","b","c")) {
        hmm(s);
    }
    • suena un poco como C# 😛
  4. 3

    Desea

    for (String crt : new String [] {"a","b","c"} ) {
        doSomething();
    }

    Yo uso IntelliJ y me dice que ponga el mensaje «la expresión de lo previsto» en el lado derecho del colon en la for-loop, que parece ser más exactos.

    Debo añadir que IntelliJ también ofrece a agregar el «new String []» automágicamente para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here