如果使用旧库,如何避免Java中的unchecked-conversion-warning?

Mne*_*nth 26 java generics warnings

我喜欢java中的泛型功能并经常使用它.但是我有一个问题,如果我使用的是尚未了解泛型的库.一个例子是servlet.如果使用ServletRequest.getParameterMap()结果将是原始地图,但它仅String包括键和String[]值.所以我想把它分配给一个Map<String, String[]>.但是对于这项任务我得到了警告.如何使用语言避免此警告,而不是简单地使用@SuppressWarnings注释抑制警告.

Mis*_*ble 41

正如其他人所说,除非通过压制它们,否则无法避免警告.问题恕我直言,要么你必须使用适用于小范围的注释来丢弃你的代码,要么全局忽略它们并冒险.

IIRC有一项建议是生成警告,其中返回原始类型而不是通话.

同时,我认为最好的方法是使用包装器方法,以便警告仅限于一个地方,可以安全地忽略它们:

class NoWarn {
  public static Map<String, String[]> getParameterMap(ServletRequest r) 
  {
    @SuppressWarnings("unchecked")
    Map<String, String[]> result = r.getParameterMap();
    return result;
  }
}
Run Code Online (Sandbox Code Playgroud)

注意 此答案是使用注释编辑的,注释不能在方法体内.这是不正确的,以上在语法上是正确的.我已经恢复了改变.


sta*_*lue 8

您可以做的最简洁的事情是封装从遗留代码到通用代码的转换,并仅在那里禁止警告.

例如,您可以在旧版库中放置通用外观,但这可能并不总是值得的.