Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么返回泛型映射的代码在分配给泛型映射时会生成编译器警告?_Java_Generics - Fatal编程技术网

Java 为什么返回泛型映射的代码在分配给泛型映射时会生成编译器警告?

Java 为什么返回泛型映射的代码在分配给泛型映射时会生成编译器警告?,java,generics,Java,Generics,我有一个带有此签名的方法: protected final Map<String, Object> buildOutputMappings( AbstractDataObject ado, MDBase md) 受保护的最终映射buildOutputMappings( AbstractDataObject(ado,MDBase md) 并使用此方法调用(在子类中): Map params=buildOutpu

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

   protected final Map<String, Object> buildOutputMappings(
                                 AbstractDataObject ado, MDBase md)
受保护的最终映射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<java.lang.String,java.lang.Object>
警告:警告:行(136)[未选中]未选中转换
找到:java.util.Map
必需:java.util.Map
将参数更改为非泛化映射将删除编译器警告。这是为什么?如何避免(除抑制外)

编辑:这是JDK1.5,第136行是上面的赋值语句。这两个类都没有参数化,它们只有返回泛型类型映射的方法。方法中返回的对象也被泛化

编辑:超类确实是泛型化的,尽管返回值与这些泛型无关。下面是该方法的代码,尽管声明不是我写的,我知道这很难看:

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);
  }
}
受保护的最终映射buildOutputMappings(AbstractDataObject ado,MDBase md)引发异常{
试一试{
....
Map params=新的HashMap(spc.getNumberParams());
....
返回参数;
}
捕获(例外e){
记录器。待定错误(e);
抛出新的异常(e.getMessage(),e);
}
}
下面是类声明:

public abstract class DAOBase<T extends AbstractDataObject>

public class RoleAssignmentDAO extends DAOBase
公共抽象类DAOBase
公共类roleasignmentdao扩展了DAOBase

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

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

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


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

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


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

您使用的是什么版本的Java?第136行是什么?您展示的是这两种语言中的一种吗?这里没有警告,使用Java 5和Java 6进行了测试。您可以包含返回代码吗?我感觉是你的回归给你带来了问题。关于你的代码,我们有些不知道。就我所见,你的代码很好。如果你在这里发布你的方法代码,它会有所帮助。你使用的是什么版本的Java?第136行是什么?您展示的是这两种语言中的一种吗?这里没有警告,使用Java 5和Java 6进行了测试。您可以包含返回代码吗?我感觉是你的回归给你带来了问题。关于你的代码,我们有些不知道。就我所见,你的代码很好。如果你在这里发布你的方法代码,它会有所帮助。我几乎可以肯定你是对的。我看不出还有什么问题。我几乎可以肯定你是对的。我看不出还有什么问题。+1表示正确,我希望我能给你另一个+1表示通灵。这是正确的答案。编译器从超类中删除泛型,因为子类没有使用参数类型。+1表示正确,我希望我能给你另一个+1表示通灵。这是正确的答案。如果子类不使用参数类型,编译器将从超类中删除泛型。
public abstract class DAOBase<T extends AbstractDataObject>

public class RoleAssignmentDAO extends DAOBase