使用带有通配符的通用映射时出现问题
我有一个方法,返回一个定义为:map
public Map<String, ?> getData();
我不清楚这种方法的实际实现,但是,当我尝试这样做时:
obj.getData().put("key","value")
我收到以下编译时错误消息:
Map 类型中的方法 put(String, capture#9-of ?) 不适用于参数(String, String)
问题出在哪里?不是什么类型的?String
提前致谢。
我有一个方法,返回一个定义为:map
public Map<String, ?> getData();
我不清楚这种方法的实际实现,但是,当我尝试这样做时:
obj.getData().put("key","value")
我收到以下编译时错误消息:
Map 类型中的方法 put(String, capture#9-of ?) 不适用于参数(String, String)
问题出在哪里?不是什么类型的?String
提前致谢。
返回类型
Map<String, ?>
与 相同
Map<String, ? extends Object>
返回的具体类型的均值可以是 .您不能将 a 放入 ,因此会出现错误。Map<String, AnyClass>
String
AnyClass
一个好的一般原则是在方法返回类型中不使用通配符。
通配符表示“值类型参数可以是任何内容” - 它并不意味着“您可以使用它,就好像它是您想要的任何东西一样”。换句话说,a 作为 a 是有效的 - 但您不希望能够将 String 值放入其中。Map<String, UUID>
Map<String, ?>
如果你想要一个绝对可以接受字符串值的映射,你需要:
Map<String, ? super String>