1

次のような2つのリストを作成しました

List<LearnerEnrollment> learnerEnrollmentList = new ArrayList<LearnerEnrollment>();
List<LearnerCourseEnrollError> enrollErrorList = new ArrayList<LearnerCourseEnrollError>();

次に、次のような2つのマップを作成しました

Map<String, List<LearnerCourseEnrollError>> courseErrorMap = new HashMap<String, List<LearnerCourseEnrollError>>();
Map<String, List<LearnerEnrollment>> courseSuccessMap = new HashMap<String, List<LearnerEnrollment>>();

次に、上記の2つのマップを保持する別のマップを作成しました

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);       
    }       
}

今、私はマップに値を入れています

courseSuccessMap.put(learner.getVu360User().getUsername(), learnerEnrollmentList);
courseErrorMap.put(learner.getVu360User().getUsername(), enrollErrorList);
courseMap.put("successfulCoursesMap", courseSuccessMap);
courseMap.put("unSuccessfulCoursesMap", courseErrorMap);

return courseMap;

しかし、これらの2行でエラーが発生しています

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>and List<LearnerEnrollment>is List <Object>because LearnerEnrollment extends Objectです。これらのエラーが発生するのはなぜですか?

このようにマップを宣言すると

Map<String, Map<String, ?>> courseMap = new HashMap<String, Map<String, ?>>();

その後、エラーはありません。最初のケースでエラーが発生するのはなぜですか?

ありがとう

4

2 に答える 2

6

あなたが言った:

List<LearnerEnrollment>List<Object>

これは間違っています。それが本当なら、あなたはできるでしょう:

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

そして、LearnerEnrollment のタイプ セーフなリストには、突然 String が含まれます。

于 2013-11-11T11:06:32.107 に答える
1

これは、Java の List が共変ではないためです。AList<LearnerEnrollment>は のサブクラスではありませんList<Object>

詳細については、 Java 共分散を参照してください。

于 2013-11-11T11:07:30.730 に答える