Java 通用方法不适用于';t compile-该方法不适用于参数

Java 通用方法不适用于';t compile-该方法不适用于参数,java,generics,Java,Generics,这是我的密码。编译器拒绝编译它: private transient List<? extends Map<String, Object>> donnees; // ... public <M extends Map<String, Object>> void addDonnee(M nouvelleDonnee) { getDonnees().add(nouvelleDonnee); } public List<? exten

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

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

private transient List您不能将任何内容插入定义为
List的
列表中
您不能将任何内容插入定义为
List的
列表中
getDonnees
方法返回实现
Map
的“某物”列表。例如,它可以是
TreeMap
s的列表,也可以是
HashMap
s的列表;没办法知道

由于您不知道列表的确切组件类型,因此无法向其中添加任何内容。例如,您可以尝试将
HashMap
添加到
TreeMap
列表中

这两个方法应该以某种方式使用相同的参数,例如,使用类声明的参数:

class SomeClass<M extends Map<String, Object>> {

  public void addDonnee(M nouvelleDonnee) {
    getDonnees().add(nouvelleDonnee);
  }

  public List<M> getDonnees() {
    // ...
    return donnees;
  }
}
class-SomeClass{
公共无效地址(M Nouvelledonee){
getDonnees().add(nouvelleDonnee);
}
公共列表getDonnees(){
// ...
归还受贿人;
}
}

方法
getDonnees
返回实现
Map
的“某物”列表。例如,它可以是
TreeMap
s的列表,也可以是
HashMap
s的列表;没办法知道

由于您不知道列表的确切组件类型,因此无法向其中添加任何内容。例如,您可以尝试将
HashMap
添加到
TreeMap
列表中

这两个方法应该以某种方式使用相同的参数,例如,使用类声明的参数:

class SomeClass<M extends Map<String, Object>> {

  public void addDonnee(M nouvelleDonnee) {
    getDonnees().add(nouvelleDonnee);
  }

  public List<M> getDonnees() {
    // ...
    return donnees;
  }
}
class-SomeClass{
公共无效地址(M Nouvelledonee){
getDonnees().add(nouvelleDonnee);
}
公共列表getDonnees(){
// ...
归还受贿人;
}
}

Java抱怨,因为它不知道
donnees
addDonnee
getDonnees
的类型是相同的。一个可以是
列表
,而其他可以是不兼容的
列表
(不能将
哈希映射
添加到
列表
,反之亦然)

您可以改为向类中添加泛型参数:

public class SomeClass<T extends Map<String, Object>>
{
  private transient List<T> donnees;

  public void addDonnee(T nouvelleDonnee) {
      getDonnees().add(nouvelleDonnee);
  }

  public List<T> getDonnees() {
      return donnees;
  }
}
公共类SomeClass
{
私人临时名单;
公共无效地址(T Nouvelledonee){
getDonnees().add(nouvelleDonnee);
}
公共列表getDonnees(){
归还受贿人;
}
}

Java抱怨,因为它不知道
donnees
addDonnee
getDonnees
的类型是相同的。一个可以是
列表
,而其他可以是不兼容的
列表
(不能将
哈希映射
添加到
列表
,反之亦然)

您可以改为向类中添加泛型参数:

public class SomeClass<T extends Map<String, Object>>
{
  private transient List<T> donnees;

  public void addDonnee(T nouvelleDonnee) {
      getDonnees().add(nouvelleDonnee);
  }

  public List<T> getDonnees() {
      return donnees;
  }
}
公共类SomeClass
{
私人临时名单;
公共无效地址(T Nouvelledonee){
getDonnees().add(nouvelleDonnee);
}
公共列表getDonnees(){
归还受贿人;
}
}

两个
M
都是子类,不能相互转换。尝试声明
donnees

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

两个
M
都是子类,不能相互转换。尝试声明
donnees

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

检查的答案检查的答案你的意思是我必须创建一个这样的类
愚人扩展ArrayList
?来自的解决方案可能对你有用?你的意思是我必须创建一个这样的类
愚人扩展ArrayList
?来自的解决方案可能对你有用?谢谢你,@DuncanJones.谢谢,@DuncanJones。