2012-10-09 11 views
9

Uso Eclipse, por lo que para mí el uso de //$FALL-THROUGH$ comentarios es una práctica común en declaraciones de interruptor y similares. Pero mi colega usa Netbeans y cuestionó qué diablos estaba haciendo con estos. E intentar googlear cualquier cosa con un símbolo es como intentar tirar los dientes con un par de manoplas congeladas y sin herramientas ...

Es el uso del comentario //$FALL-THROUGH$, signos de dólar y todo, una cosa java estándar, o algún tipo de magia Eclipse? Si cargo el mismo código en Netbeans u otro IDE, o lo ejecuto a través del compilador java independiente, pasaré por las sentencias de conmutación que aún estarán marcadas con advertencias, incluso con dicho comentario o no? ¿Hay una forma estándar de hacer esto más allá del uso de la anotación @SupressWarning (que simplemente desordenaría el código dado cómo debe usarlo)?

+0

¿Puedes dar un ejemplo de lo que hace este comentario? – RNJ

Respuesta

10

Este tipo de cosas dependen de IDE/style-check-tool. No hay "comentarios estándar de Java".

(Bueno, Javadocs son estándar, pero no controlan la compilación de informes/error.)

Una explicación de la construcción $FALL-THROUGH$ se menciona en Eclipse release documentation:

El problema del compilador para las caídas esperadas en las declaraciones de mayúsculas y minúsculas ahora se puede suprimir precediendo la siguiente declaración de caso con un comentario que comienza con $ FALL-THROUGH $. Esto es especialmente interesante para el código que no puede usar la anotación @SuppressWarnings ("fallthrough") de J2SE-5.0-style.

Tenga en cuenta que los nombres de advertencia para la anotación @Suppresswarnings dependen del compilador y no son un estándar de lenguaje Java.

+0

Pensé que preguntaría. Respuesta final: entonces es magia Eclipse. Hurra. : j – Tustin2121

3

He visto otras herramientas (por ejemplo, FindBugs) que emplean un esquema de comentarios similar. Pero nada está estandarizado.

En la mayoría de los casos, estas advertencias solo se lanzan cuando la declaración de mayúsculas y minúsculas contiene el código antes de que se produzca. En la mayoría de los casos, puede evitar esto factorizando el código común.

Por ejemplo esto no suele desencadenar una advertencia:

switch (foo) { 
    case 1: 
    case 2: 
    doSomething(); 
    break; 
    ... 
} 

pero esto sería:

switch (foo) { 
    case 1: 
    doSomething(); 
    case 2: 
    doSomethingElse(); 
    break; 
    ... 
} 

Yo personalmente creo que las advertencias están ahí por una razón. Considero que es más fácil de leer (y seguro) refactorizar a cabo código común y no tienen no vacías de otoño-through:

switch (foo) { 
    case 1: 
    doSomething(); 
    doSomethingElse(); 
    break; 

    case 2: 
    doSomethingElse(); 
    break; 
    ... 
} 
+0

Soy consciente de lo que causa la advertencia de caída (de hecho, me volví la advertencia, ya que está desactivada por defecto). De todos modos, +1 para aquellos que no saben de lo que estoy hablando anteriormente.(Además, prefiero usar cambios que saturar mi código con más métodos, especialmente uno que se usa solo una vez en un método). – Tustin2121

+0

Es una cuestión de gusto, por lo que no puedo declarar exactamente que estás equivocado. Solo te sugiero que recuerdes que de las muchas cosas que los programadores pueden hacer mal, esto fue seleccionado como algo para advertir. La presencia o ausencia de un "corte" después de un fragmento de código en una declaración de caso es bastante difícil de asimilar cuando se está manteniendo el código de otras personas. –

+1

En C#, estos tipos de fallthroughs ni siquiera están permitidos porque tiene un gran potencial para errores (solo casos múltiples antes de cualquier tipo de declaración) –

2

este comentario es IDE específico y puede fallar con otras damas IDE y de código, aunque findbugs es inteligente lo suficiente como para comprobar los comentarios con la palabra caída en ellos. Pero, en cualquier caso, no debe confiar en los comentarios para hacer más que dirigir al otro programador, solo está creando una cosa más para mantener.

Cuestiones relacionadas