簡體   English   中英

在return語句中對未選中的強制轉換進行警告

[英]warning on unchecked cast on a return statement

我有一個類,它包含一組處理類型為T的值的Valueloader。這就是我創建類的方法。 但是這個類在第39行return (ValueLoader<T>) loader;上的未經檢查的強制轉換時生成警告return (ValueLoader<T>) loader;

我想知道是否有辦法清理這個警告。 這是我的代碼。

public enum ValueLoaderRegistry {

REGISTRY;

private transient Map<Class<?>, ValueLoader<?>> map = new HashMap<Class<?>, ValueLoader<?>>();

private ValueLoaderRegistry() {
    initialize();
}

private void initialize() {
    map.put(Integer.class, new IntegerValueLoader());
    map.put(String.class, new StringValueLoader());
    map.put(Double.class, new DoubleValueLoader());
    map.put(Boolean.class, new BooleanValueLoader());
    map.put(Regions.class, new RegoinsValueLoader());

}



@SuppressWarnings("unchecked")
public <T> ValueLoader<T> getLoader(Class<T> key){
    //Suppress unchecked cast warning, as by design we are making sure that 
    //the map contains the objects with right cast. 
    ValueLoader<?> loader = map.get(key);
    return (ValueLoader<T>) loader;
}

}

由於map.values()包含ValueLoader<?> ,因此沒有一種干凈的方式(因為 - 你需要一個未經檢查的map.values() 但是,通過構建地圖可以知道演員陣容是安全的,因此可以取消警告。

您可能希望通過添加這樣的方法來確保構建是安全的,而不是直接向地圖添加元素:

private <T> void safePut(
    Map<Class<?>, ValueLoader<?>> map,
    Class<T> clazz,
    ValueLoader<T> valueLoader) {
  map.put(clazz, valueLoader);
}

這會阻止你編寫map.put(Integer.class, new StringValueLoader()); 偶然。

您還可以考慮對局部變量進行強制轉換,這樣您就可以僅僅抑制該變量,而不是整個方法:

@SuppressWarnings("unchecked")
ValueLoader<T> loader = (ValueLoader<T>) map.get(key);
return loader;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM