2011-05-17 12 views
6

Czasami podczas debugowania masz nieosiągalny fragment kodu. Czy mimo to należy wyłączyć ostrzeżenie?Java: Jak @SuppressWarnings nieosiągalny kod?

+0

Prawdopodobnie nie - nieosiągalny kod jest zazwyczaj oznaką źle zakodowanej metody. Czy mógłbyś to opublikować? Musi to być jakiś sposób, żeby to zmienić. –

+12

Wygląda na to, że dodał wczesny powrót, lub prawdopodobnie "jeśli (fałsz) ...", do debugowania. Nic w tym złego. –

+0

dlaczego tłumić ostrzeżenie podczas debugowania? pojawi się ostrzeżenie przypominające o usunięciu kodu po zakończeniu debugowania - IMO najlepiej * nie * tłumić ostrzeżeń związanych z debugowaniem. Tłumienie ma sens w przypadku * znanych i niepotrzebnych ostrzeżeń * w * kodzie produkcyjnym *. – vaxquis

Odpowiedz

4

Jedynym sposobem, aby to zrobić na dowolnym kompilatorze jest @SupressWarnings("all").

Jeśli używasz platformy Eclipse, spróbuj @SuppressWarnings("unused").

+0

To nie jest jedyny sposób. Zobacz moją odpowiedź (http://stackoverflow.com/a/6025389/8946). –

+0

@SoftwareMonkey Twoje podejście wciąż powoduje ostrzeżenia w Eclipse i IntelliJ. Jest to jedyne rozwiązanie, które działa na kompilatorach i IDE. –

3

Jak Cletus tells us,

To zależy od IDE lub kompilator.

To powiedziawszy, przynajmniej dla Eclipse, nie ma sposobu, aby to zrobić. W mojej konfiguracji Eclipse nieosiągalny kod powoduje błąd podczas kompilacji, a nie tylko ostrzeżenie. Pamiętaj też, że różni się to od "martwego kodu", np.

if (false) 
{ 
    // dead code here 
} 

dla których Eclipse (domyślnie) wysyła ostrzeżenie, a nie błąd.

9

Java ma (prymitywne) wsparcie dla debugowania jak to w tym prostego if na stałych logicznych nie będzie generować takie ostrzeżenia (i rzeczywiście, gdy ocena jest fałszywy kompilator usunie cały blok warunkowy). Więc można zrobić:

if(false) { 
    // code you don't want to run 
    } 

Podobnie, jeśli chwilowo wstawienie wcześniejszego rozwiązania do debugowania, można to zrobić tak:

if(true) { return blah; } 

lub

if(true) { throw new RuntimeException("Blow Up!"); } 

I pamiętać, że specyfikacja Java jawnie deklaruje, że ciągle fałszywe bloki warunkowe są usuwane w czasie kompilacji, a IIRC, stale prawdziwe mają usunięty warunek. Obejmuje takie jak:

public class Debug 
{ 
static public final boolean ON=false; 
} 

... 

if(Debug.ON) { 
    ... 
    } 
+1

javac nie generuje ostrzeżeń dla 'if (false)', ale kompilator Eclipse ma. –

+0

@Daniel: To niefortunne; nie powinno to dotyczyć zwykłego 'if (false)' lub gdy jedyną zmienną warunkową jest 'static final boolean' ustawiony na 'false'. –

+3

Podobają mi się ostrzeżenia, ponieważ przypominają mi, żebym wrócił i zrobił coś z martwego kodu, ale IIRC domyślnie ustawił błąd w starej wersji Eclipse, więc uciekłbym się do rzeczy takich jak 'if (Math.abs (0) = = 0) '. –

3

Według Java Language Specification:

Jest to błąd kompilacji, jeśli oświadczenie nie może być wykonany, ponieważ jest nieosiągalny.

Czasami można wyłączyć nieosiągalny kod w martwym kodzie (np. Treść if (false) {...}). Ale to błąd jest częścią definicji języka.

Powiązane problemy