java - 使用泛型时在变量分配中出错

标签 java generics

我做了两个列表

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> is List<Object>

这是错误的。如果这是真的,您将能够:

List<<LearnerEnrollment> list = new ArrayList<>();
List<Object> objectList = list;
objectList.add("Now what?");

LearnerEnrollment 的类型安全列表会突然包含一个字符串。

关于java - 使用泛型时在变量分配中出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904710/

相关文章:

java - Slick2D:getTileProperty 在不应该返回 true 时返回

c# - 使用递归和泛型创建快速排序

java - 如何使用反射来构建通用子类型?

generics - Haxe - 如何将泛型类传递给参数

java - Android 中的 OpenCV 旋转(去偏斜)- C++ 到 Java 的转换

java - Drools:访问 ArrayList 作为 Map 中的值

java - 在解析之前重写 solr 查询

java - 如何使用 Thymeleaf 模板引擎将带有可变参数的处理指令注入(inject)到 XML 中

generics - 从泛型函数返回特定实例

C# 5.0 泛型 : param type inference