这是我的代码。编译器拒绝编译它:

private transient List<? extends Map<String, Object>> donnees;

// ...

public <M extends Map<String, Object>> void addDonnee(M nouvelleDonnee) {
    getDonnees().add(nouvelleDonnee);
}

public List<? extends Map<String, Object>> getDonnees() {
    // ...

    return donnees;
}


为什么会出现此错误?


  The method add(capture#4-of ? extends Map<String,Object>) in the type List<capture#4-of ? extends Map<String,Object>> is not applicable for the arguments (M)


编辑
这是我如何解决我的问题:

private transient List<Map<String, Object>> donnees;

// ...

public void addDonnee(Map<String, Object> nouvelleDonnee) {
    getDonnees().add(nouvelleDonnee);
}

public List<Map<String, Object>> getDonnees() {
    // ...

    return donnees;
}


现在编译器很高兴! :)

最佳答案

?M都是子类,并且可能无法相互转换。尝试声明donnees

private transient List<Map<String, Object>> donnees;

09-08 11:56