dhy*_*ngh -4 java generics collections hashmap set
我想List<HashMap<String, Object>>投入Set<StudentInfo>
我有方法
public List<HashMap<String,Object>> getStudentData(studentId);
Run Code Online (Sandbox Code Playgroud)
我想将结果转换为Set,所以我用过
Set<StudentInfo> studentFilteredInfo = new HashSet<>();
List<Map<String, Object>> studentCompleteRecord = getStudentData(1005);
studentFilteredInfo.addAll((Collection<? extends StudentInfo>studentCompleteRecord ));
Run Code Online (Sandbox Code Playgroud)
最初当我在localhost上使用java 8,eclipse和tomcat 8执行它时工作正常.
当我试图用maven构建它时
mvn clean package
Run Code Online (Sandbox Code Playgroud)
它将通过一个错误:
不兼容的类型: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
cannot be converted to java.util.Collection<? extends com.school.model.StudentInfo>
Run Code Online (Sandbox Code Playgroud)
你是错误的:没有铸造从List<Map<String, Object>>进一些Set<Whatever>!
转换基本上意味着:你知道某些"对象"具有更具体的类型; 因此,你告诉编译器:"你可以放心地认为这里的东西是现实中的其他东西".
但这意味着:实际上(在运行时),"东西"真的是"别的东西"!单独你在问题中提供的泛型类型非常清楚:你不能在这里进行演员表演!
换句话说:你必须编写的代码是迭代您的地图列表; 提取创建新StudentInfo对象所需的信息.然后你收集那些新创建的对象; 并将它们放入一个新的集合; 然后你可以从你的方法返回!
最后:始终避免"具体"实现类型; 你用过List<HashMap<...- 相反,你应该去List<Map<...!
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |