当前位置: 首页 > 面试题库 >

在通配符上使用通用地图时出现问题

梁豪
2023-03-14
问题内容

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

public Map<String, ?> getData();

我不清楚此方法的实际实现,但是当我尝试这样做时:

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

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

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

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

提前致谢。


问题答案:

通配符的意思是“值类型参数可以是任何东西”- 并不 意味着“您可以像使用任何想要的东西一样使用它”。换句话说,a Map<String, UUID>作为Map<String, ?>- 是有效的,但是您不希望能够将String值放入其中。

如果您想要一个绝对可以接受字符串值的映射,则需要:

Map<String, ? super String>


 类似资料:
  • 我正在阅读OracleDocGenericmethod中的泛型方法。当它说什么时候使用通配符和什么时候使用泛型方法时,我对比较感到很困惑。引用文档。 我们本可以在这里使用通用方法: [...]这告诉我们类型参数正被用于多态;它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。如果是这样的话,应该使用通配符。通配符旨在支持灵活的子类型,这就是我们在这里试图表达的。 我们不觉得像《代码》(Col

  • 问题内容: 使用Type通配符的Update()也存在该问题,但是我发现DocumentExists()的作用相同,因此在此将问题简化如下: 这有效… 但这失败了 如果我完全省略Type,它也会失败。有人知道如何进行这项工作吗?(即使不管文档的类型如何都可以,对我而言还是可以的。) 问题答案: 据我所知,不可能在类型名称中指定通配符,但是您可以做一些技巧。 您可以在索引中查询具有特定ID的文档,并

  • 问题内容: 我正在从OracleDocGenericMethod中阅读有关泛型方法的信息。当比较指出何时使用通配符以及何时使用通用方法时,我对此感到非常困惑。引用文档。 我们可以在这里使用通用方法: […]这告诉我们类型参数正在用于多态。它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。在这种情况下,应使用通配符。通配符旨在支持灵活的子类型化,这就是我们在此要表达的内容。 我们难道不认为像

  • 问题内容: 这是来自 HeadFirst Java的 :(第575页) 这个: 做与此相同的事情: 所以这是我的问题:如果它们完全相同,我们为什么不写 要么 另外,什么时候使用?是有用的?而不是使用泛型的方法声明(如上所述)中的T或用于类声明?有什么好处? 问题答案: 之间的最大区别 和 是在前一种方法中,您可以在方法中将“ T”作为给出的具体类。在第二种方法中,您无法执行此操作。 这里有一个更复

  • 问题内容: 想要以类似方式使用地图键,但是地图中的值不同时,我已经遇到过几次这个问题。我以为我可以编写一个函数,将我想要的键类型与interface {}用作值类型,但是它不起作用。 不知道是否有一种优雅的方式可以做到这一点,我只是觉得腰部饱满地将简单的东西重写为不同的价值。 问题答案: 尽管地图和切片本身是通用的,但它们不是协变的(它们也不是协变的,因为接口不是通用的)。这是使用不具有泛型的语言

  • 现在我想编写一个类似这样的规则来生成这些文件: 但是SnakeMake要求两个输出模板都具有相同的通配符,而这些模板没有。此外,即使SnakeMake可以处理多个通配符,它也可能希望为模板找到一个与之匹配的文件名,但我希望该文件匹配与第一个模板的匹配的所有文件,即我希望是一个列表,而不是单个文件。因此,似乎这样做的方法是: 但是我不能这样做,因为lambda函数不能在输出部分中使用。 在我看来,这