# Sinn der SuppressWarnings("unused")-Annotation



## Fant (11. Mai 2012)

Hallo zusammen,

ich habe in meinem Kopf gerade irgendwie ein paar Schwierigkeiten mit der @SuppressWarnings-Annotation. Als konkretes Beispiel mache ich mir gerade über den Fall "unused" Gedanken. Es heißt:



> SuppressWarnings("unused") is used for suppressing warnings relative to (1) local variables never read, (2) parameters never read, (3) unused imports, (4) unused private members, and (5) unused labels.



Soweit ist auch alles klar. Ich frage mich aber, ob es sinnvolle Beispiele gibt, in denen solche Fälle überhaupt auftreten können? Wieso sollte man z.B. eine (private) Membervariable, oder eine lokale Variable einführen, wenn man sie überhaupt nicht benutzt? Wieso sollte man etwas importieren, was man nicht benötigt? Ist es nicht sinnvoller das, was ohnehin nicht benötigt wird, einfach wegzulassen?

Gruß Fant


----------



## HimBromBeere (11. Mai 2012)

> Ist es nicht sinnvoller das, was ohnehin nicht benötigt wird, einfach wegzulassen?


Jo. Aber alles, was an Warnungen geworfen werden kann, kann man halt auch unterdrücken, darum gibt´s diese Anotation wahrscheinlich...


----------



## tfa (11. Mai 2012)

Normalerweise braucht man das SuppressWarnings("unused") nicht. Mir ist es bisher nur im Zusammenhang mit Mocking-Frameworks begegnet:


```
@Test
public void irgendeinTollerTest() {
    final MyEntry entry = createEntry();

    new MockUp<MyEntryDao>() {
        @Mock
        @SuppressWarnings("unused")
        public List<MyEntry> findAll() {
            return Arrays.asList(entry);
        }
    };
    MyServiceImpl service = createService();
    service.start();
    assertThat(service.getEntryList().size(), is(1));
}
```

Ohne das SuppressWarnings meckert der Compiler.


----------



## maki (11. Mai 2012)

Im falle von Methodenparamtern kann das schon Sinn machen, wenn die Methode zB. von einem allgemeinen Interface vorgegeben ist, diese spezielle Implementierung aber eben nicht alle Parameter nutzt die in der Signatur angegeben sind, denn man muss die Parameter dann angegeben, nutzt sie aber nciht.


----------



## Firephoenix (11. Mai 2012)

maki hat gesagt.:


> Im falle von Methodenparamtern kann das schon Sinn machen, wenn die Methode zB. von einem allgemeinen Interface vorgegeben ist, diese spezielle Implementierung aber eben nicht alle Parameter nutzt die in der Signatur angegeben sind, denn man muss die Parameter dann angegeben, nutzt sie aber nciht.



Meinst du damit sowas in der Richtung?

```
@Override
    public void foo( int x, String y )
    {
       

    }
```

Da bekomme ich nämlich keine Warning, allerdings hier:


```
@Override
    public void foo( @SuppressWarnings( "unused" )
    int x, String y )
    {

    }
```
folgende:


> Unnecessary @SuppressWarnings("unused")



Kann es sein, dass das in älteren Java/Eclipse-Versionen mal eine Warning gab wenn man Parameter nicht verwendet hat?

Gruß


----------



## SlaterB (11. Mai 2012)

ich habe z.B. eine Testklasse mit 10 Methoden, die in einer anderen Methode alle in 10 Zeilen untereinander aufgerufen werden,
davon sind meist 9 auskommentiert, nur eine aktiv


----------

