为什么返回通用化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语句与你返回的方法定义所指示的正确类型不匹配。 我无法确定,因为您没有包含该代码。