我做了两个列表
List<LearnerEnrollment> learnerEnrollmentList = new ArrayList<LearnerEnrollment>();
List<LearnerCourseEnrollError> enrollErrorList = new ArrayList<LearnerCourseEnrollError>();
然后我制作了两个 map
Map<String, List<LearnerCourseEnrollError>> courseErrorMap = new HashMap<String, List<LearnerCourseEnrollError>>();
Map<String, List<LearnerEnrollment>> courseSuccessMap = new HashMap<String, List<LearnerEnrollment>>();
然后我制作了另一个 Map 来容纳上面的两个 Map
Map<String, Map<String, List<Object>>> courseMap = new HashMap<String, Map<String, List<Object>>>();
然后我使用下面的代码在列表中添加项目;
for (com.softech.vu360.lms.model.Course course : courseList) {
Object result = getEnrollmentForCourse(customer, learner, course);
if (result instanceof LearnerEnrollment) {
LearnerEnrollment newEnrollment = (LearnerEnrollment)result;
learnerEnrollmentList.add(newEnrollment);
} else if (result instanceof String) {
String errorMessage = (String)result;
LearnerCourseEnrollError enrollError = new LearnerCourseEnrollError(errorMessage, course);
enrollErrorList.add(enrollError);
}
}
现在我将值放入 map
courseSuccessMap.put(learner.getVu360User().getUsername(), learnerEnrollmentList);
courseErrorMap.put(learner.getVu360User().getUsername(), enrollErrorList);
courseMap.put("successfulCoursesMap", courseSuccessMap);
courseMap.put("unSuccessfulCoursesMap", courseErrorMap);
return courseMap;
但是我在这两行得到了错误
courseMap.put("successfulCoursesMap", courseSuccessMap);
courseMap.put("unSuccessfulCoursesMap", courseErrorMap);
那个
The method put(String, Map<String,List<Object>>) in the type
Map<String,Map<String,List<Object>>> is not applicable for the arguments
(String, Map<String,List<LearnerEnrollment>>)
The method put(String, Map<String,List<Object>>) in the type
Map<String,Map<String,List<Object>>> is not applicable for the arguments
(String, Map<String,List<LearnerCourseEnrollError>>)
为什么?
我在 map 中的列表类型是 List<Object>
和 List<LearnerEnrollment>
是List <Object>
因为LearnerEnrollment extends Object
.为什么我会收到这些错误?
如果我这样声明我的 map
Map<String, Map<String, ?>> courseMap = new HashMap<String, Map<String, ?>>();
那么就没有错误了。为什么我在第一种情况下会出错?
谢谢
最佳答案
你说:
List<LearnerEnrollment>
isList<Object>
这是错误的。如果这是真的,您将能够:
List<<LearnerEnrollment> list = new ArrayList<>();
List<Object> objectList = list;
objectList.add("Now what?");
LearnerEnrollment 的类型安全列表会突然包含一个字符串。
关于java - 使用泛型时在变量分配中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904710/