Как я могу аннотировать с @SuppressWarnings («unchecked») для одного приведения вместо целого метода? - PullRequest
16 голосов
/ 04 ноября 2011

Кажется чрезмерным, когда к методу применяются аннотации.

Как использовать аннотацию @SuppressWarnings ("unchecked") для одного приведения вместо целого метода?

В этом примере я только что закончил проверку того, что приведение будет безопасным, и поэтому приступаю к приведению, но получаю раздражающее предупреждение.

@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());

}

Ответы [ 2 ]

28 голосов
/ 04 ноября 2011

Вы можете использовать @SuppressWarnings для объявления одной переменной:

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

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

Это должно быть в точке объявления локальной переменной, хотя:

Аннотации могут бытьиспользуется в качестве модификаторов в любом объявлении, будь то пакет (§7.4), класс (§8), интерфейс, поле (§8.3, §9.3), метод (§8.4, §9.4), параметр, конструктор (§8.8) или локальныйпеременная (§14.4).

2 голосов
/ 04 ноября 2011

Вы можете извлечь метод для этой одной строки и подавить для этой строки / метода.

Многие инструменты / идентификаторы имеют свои собственные способы сделать это, такие как размещение аннотации на локальной переменной, но я нене верят, что все компиляторы поддерживают это.

...