Czasami podczas debugowania masz nieosiągalny fragment kodu. Czy mimo to należy wyłączyć ostrzeżenie?Java: Jak @SuppressWarnings nieosiągalny kod?
Odpowiedz
Jedynym sposobem, aby to zrobić na dowolnym kompilatorze jest @SupressWarnings("all")
.
Jeśli używasz platformy Eclipse, spróbuj @SuppressWarnings("unused")
.
To nie jest jedyny sposób. Zobacz moją odpowiedź (http://stackoverflow.com/a/6025389/8946). –
@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. –
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.
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) {
...
}
javac nie generuje ostrzeżeń dla 'if (false)', ale kompilator Eclipse ma. –
@Daniel: To niefortunne; nie powinno to dotyczyć zwykłego 'if (false)' lub gdy jedyną zmienną warunkową jest 'static final boolean' ustawiony na 'false'. –
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) '. –
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.
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ć. –
Wygląda na to, że dodał wczesny powrót, lub prawdopodobnie "jeśli (fałsz) ...", do debugowania. Nic w tym złego. –
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