2011-11-04 10 views
16

Wydaje się przesadne, gdy adnotacje dotyczą metody.Jak utworzyć adnotację przy użyciu @SuppressWarnings ("odznaczone") dla pojedynczego rzutu zamiast całej metody?

Jak używać adnotacji @SuppressWarnings ("odznaczone") dla pojedynczego rzutu zamiast całej metody?

W tym przykładzie właśnie skończyłem sprawdzać, czy rzut jest bezpieczny, więc gram dalej, ale otrzymuję denerwujące ostrzeżenie.

@Override 
public void execDetails() 
{ 
    Map<Integer, ResponseList<?>> responseMap = 
      new HashMap<Integer, ResponseList<?>>(); 

    // ... omitted code ... 

    ResponseList<?> responseList = responseMap.get(requestId); 
    Class<?> elementType = responseList.getElementType(); 
    if (elementType == ExecutionDetail.class) 
     ((ResponseList<ExecutionDetail>)responseList).add(new ExecutionDetail()); 

} 

Odpowiedz

28

Można użyć @SuppressWarnings dla pojedynczej deklaracji zmiennej:

public static List<String> foo(List<?> list) { 
    List<String> bad = (List<String>) list; 

    @SuppressWarnings("unchecked") 
    List<String> good = (List<String>) list; 
    return good; 
} 

To musi być w punkcie lokalnej deklaracji zmiennej choć:

Adnotacje mogą być stosowane jako modyfikatory w jakiejkolwiek deklaracji , czy pakiet (§7.4), klasa (§8), interfejs, pole (§8.3, §9.3), metoda (§8.4, §9.4), parametr, konstruktor (§8.8) lub zmienna lokalna (§14.4).

+3

Wygląda na to, że adnotacja pomaga tylko wtedy, gdy rzutowanie i deklaracja zmiennych są w tym samym wyciągu. – H2ONaCl

+0

@broiyan: Tak, to by mnie nie zaskoczyło - ale zawsze możesz wprowadzić dodatkową zmienną lokalną tylko ze względu na to stwierdzenie :) –

+0

To może stać się bardzo brzydkie w bloku przełączającym ze względu na współdzielony zasięg. – shmosel

2

Można wyodrębnić metodę dla tej linii i pominąć dla tej linii/metody.

Wiele narzędzi/ides ma własne sposoby robienia tego, takie jak umieszczanie adnotacji na zmiennej lokalnej, ale nie wierzę, że wszystkie kompilatory obsługują to.

Powiązane problemy