我有這個簽名的方法:爲什麼返回通用化Map的代碼在分配給通用Map時會生成編譯器警告?
protected final Map<String, Object> buildOutputMappings(
AbstractDataObject ado, MDBase md)
而且調用此方法(在子類中):
Map<String, Object> params = buildOutputMappings(ra, md);
我得到這個編譯器警告:
Warning:Warning:line (136)[unchecked] unchecked conversion
found : java.util.Map
required: java.util.Map<java.lang.String,java.lang.Object>
更改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);
}
}
下面是類聲明:
public abstract class DAOBase<T extends AbstractDataObject>
public class RoleAssignmentDAO extends DAOBase
您使用的是什麼版本的Java? – 2009-06-24 17:05:40
什麼是136線?是你展示的這兩個中的一個? – cd1 2009-06-24 17:05:46
這裏沒有任何警告,用Java 5和Java 6測試過 – dfa 2009-06-24 17:08:39