如何使用@SuppressWarnings(“unchecked”)为单个强制转换而不是整个方法进行注释?

时间:2011-11-04 13:06:46

标签: java annotations suppress-warnings

当注释应用于方法时似乎过多。

如何对单个演员而不是整个方法使用注释@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 个答案:

答案 0 :(得分:28)

您可以将@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)。

答案 1 :(得分:2)

您可以为该一行提取方法并抑制该行/方法。

许多工具/ ides都有自己的方法,例如将注释放在局部变量上,但我不相信所有编译器都支持这一点。