为什么返回通用化Map的代码在分配给通用Map时会生成编译器警告?

我有一个带有此签名的方法:

protected final Map buildOutputMappings( AbstractDataObject ado, MDBase md) 

并使用此方法调用(在子类中):

  Map params = buildOutputMappings(ra, md); 

我得到这个编译器警告:

  Warning:Warning:line (136)[unchecked] unchecked conversion found : java.util.Map required: java.util.Map 

将params更改为非通用化Map会删除编译器警告。 为什么这样以及如何避免(抑制除外)?

编辑:这是JDK 1.5,第136行是上面的赋值语句。 这两个类都没有参数化 ,它们只有返回generics类型Map的方法。 方法中返回的对象也是通用的。

编辑:超类确实是通用的,虽然返回值与那些generics无关。 这是该方法的代码,虽然有免责声明,我没有写这个,我知道它是丑陋的:

 protected final Map buildOutputMappings(AbstractDataObject ado, MDBase md) throws DAOException { try { .... Map params = new HashMap(spc.getNumberInParams()); .... return params; } catch (Exception e) { logger.undeterminedError(e); throw new DAOException(e.getMessage(), e); } } 

以下是类声明:

 public abstract class DAOBase public class RoleAssignmentDAO extends DAOBase 

我的猜测是你没有在子类中正确使用generics,并且编译器正在禁用该类的generics。 因此,buildOutputMappings调用的返回类型将转换为原始类型,并且正在生成警告。 是参数化的父类? 子类是否包含父类参数的类型?

简而言之,您的错误很可能是子类或父类中某处的删除类型参数。

我觉得你的实际return语句与你返回的方法定义所指示的正确类型不匹配。 我无法确定,因为您没有包含该代码。