2011-11-04 32 views
16

註解適用於方法時,看起來過多。如何使用@SuppressWarnings(「unchecked」)對單個cast進行批註而不是整個方法?

如何使用註釋@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()); 

} 

回答

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)。

+3

看來只有當轉換和變量聲明在同一個語句中時,註釋纔會有幫助。 – H2ONaCl

+0

@broiyan:是的,這並不會讓我感到驚訝 - 但是你可以隨便引入一個額外的局部變量:) –

+0

由於共享範圍的緣故,它可能會在開關塊中變得非常難看。 – shmosel

2

您可以提取一行的方法並抑制該行/方法。

許多工具/ ides都有自己的方法,比如將註釋放在局部變量上,但我不相信所有的編譯器都支持這一點。

相關問題