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

H2O*_*aCl 16 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());

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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;
}
Run Code Online (Sandbox Code Playgroud)

它必须在局部变量声明点:

注释可以在任何声明中用作修饰符,无论是包(第7.4节),类(第8节),接口,字段(第8.3节,第9.3节),方法(第8.4节,第9.4节),参数,构造函数(第8.8节)或局部变量(§14.4).

  • 看来只有当强制转换和变量声明在同一个语句中时,注释才有用. (3认同)