使用带通配符的通用映射的问题

我有一个方法返回定义为的map

 public Map getData(); 

这个方法的实际实现对我来说并不清楚,但是,当我尝试这样做时:

 obj.getData().put("key","value") 

我得到以下编译时错误消息:

方法put(String,capture#9-of?)在Map类型中不适用于参数(String,String)

问题是什么? String不是什么类型的?

提前致谢。

通配符意味着“值类型参数可以是任何东西” – 它并不意味着“你可以使用它,好像它是你想要它的任何东西”。 换句话说, Map作为Map – 但您不希望能够将String值放入其中。

如果你想要一个绝对可以接受字符串值的地图,你需要:

 Map 

返回类型

 Map 

是相同的

 Map 

返回的具体类型的含义可以是Map 。 您不能将String放入AnyClass ,因此会出错。

一个好的一般原则是不在方法返回类型中使用通配符。

MapMap的缩写forms Map并不意味着任何东西都可以作为值添加。 它表示Map-object可以具有任何扩展Object通用值类型。

这意味着Map对象也可以是HashMapHashMap 。 因为编译器无法检查将接受哪些值类型,所以他不会让您使用值类型作为参数调用方法。

注意:

  • 您可以使用值类型作为返回值调用方法,因为所有内容都必须扩展Object(?extends Object)
  • Map Map会产生相反的效果:您始终可以使用String作为参数,但返回类型不清楚。

尝试这个:

 public Map getData(); 

[编辑]这是错的……我明白了。

我的第一个答案是:

那是java:String不是对象。

试试吧

 obj.getData().put("key",new String("value")); 

但是String扩展了Object ……而我认为String是一个原始的。 我学到了一些东西^^