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。