我有一个带有此签名的方法:
protected final Map<String, Object> buildOutputMappings(
AbstractDataObject ado, MDBase md)
Run Code Online (Sandbox Code Playgroud)
并使用此方法调用(在子类中):
Map<String, Object> params = buildOutputMappings(ra, md);
Run Code Online (Sandbox Code Playgroud)
我得到这个编译器警告:
Warning:Warning:line (136)[unchecked] unchecked conversion
found : java.util.Map
required: java.util.Map<java.lang.String,java.lang.Object>
Run Code Online (Sandbox Code Playgroud)
将params更改为非通用化Map会删除编译器警告.为什么这样以及如何避免(抑制除外)?
编辑:这是JDK 1.5,第136行是上面的赋值语句.这两个类都没有参数化,它们只有返回泛型类型Map的方法.方法中返回的对象也是通用的.
编辑:超类确实是通用的,虽然返回值与那些泛型无关.这是方法的代码,虽然免责声明我没有写这个,但我知道它很难看:
protected final Map<String, Object> buildOutputMappings(AbstractDataObject ado, MDBase md) throws DAOException {
try {
....
Map<String,Object> params = new HashMap<String, Object>(spc.getNumberInParams());
....
return params;
}
catch (Exception e) {
logger.undeterminedError(e);
throw new DAOException(e.getMessage(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是类声明:
public abstract class DAOBase<T extends AbstractDataObject>
public class RoleAssignmentDAO extends DAOBase
Run Code Online (Sandbox Code Playgroud)
我的猜测是你没有在子类中正确使用泛型,并且编译器正在禁用该类的泛型.因此,buildOutputMappings调用的返回类型将转换为原始类型,并且正在生成警告.是参数化的父类?子类是否包含父类参数的类型?
简而言之,您的错误很可能是子类或父类中某处的删除类型参数.
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |