Java为地图增加了一些价值

Java为地图增加了一些价值,java,map,wildcard,put,Java,Map,Wildcard,Put,我在工作中遇到了一个令人讨厌的问题。 我必须改变我们其中一个API的某些类型,因此我必须处理类似的事情 List<Map<String, ?>>. 因此,总的来说,它在99.8%的情况下是稳定的。 但是在我们的地图中有一些位置,我需要在内部地图中添加一些新的条目 我的问题是,有没有一种简单的方法可以向MapObject中添加一个新条目,如下所示: Map<string, ?> 没有恼人的投射波 ======编辑===== 我自己刚刚想出了一个解决办法。我只

我在工作中遇到了一个令人讨厌的问题。 我必须改变我们其中一个API的某些类型,因此我必须处理类似的事情

List<Map<String, ?>>.
因此,总的来说,它在99.8%的情况下是稳定的。 但是在我们的地图中有一些位置,我需要在内部地图中添加一些新的条目

我的问题是,有没有一种简单的方法可以向MapObject中添加一个新条目,如下所示:

Map<string, ?>
没有恼人的投射波

======编辑=====

我自己刚刚想出了一个解决办法。我只是简单地使用Map的复制构造函数,修改副本并丢弃原始副本。在我的例子中,这是可以的,因为这些映射只是数据库表的行,不应该太长/太大

但我还是很好奇,是否有更好的方法。
如果您知道更好的方法,请告诉我。

如Oracle教程中所述,因为您只能在无界通配符中插入null:

重要的是要注意列表和列表是不同的。可以将对象或对象的任何子类型插入列表中。但您只能在列表中插入null。通配符使用指南部分提供了有关如何确定在给定情况下应使用哪种通配符(如果有)的更多信息

通过使用通配符类型,您可以显式地声明它是具有类型的映射,但该类型未指定。添加到此映射是不安全的,因为编译器不知道它包含什么类型

如果您愿意将null添加到通配符类型,则可以执行以下操作:

private void addToMap(List<Map<String,?>> l){
    l.get(0).put("String",null);
}
泛型的思想是在编译时引入类类型安全性,而不是依赖于运行时ClassCastException,因此,如果需要大量转换才能使实现正常工作,您应该仔细研究一下这一点。使用复制构造函数来解决这个问题也不是一个好主意,因为它使用了未检查的赋值


这是一个例子。不要这样做。如果返回的类型过于泛型,请修复这些类型,不要在它们之上构建。您可能应该做的是修改您的方法参数类型。我发现很难相信进行调用的构造期望您的方法处理映射。您至少应该使用Map。

是否要在列表中现有的Map中添加条目?是。我必须为现有映射添加值。作为一个简单的解决方案,您可以添加带有非泛型的部分:PIs您有列表而没有列表的原因吗?我只想说映射是某种类型的映射,但该类型未指定。编译器无法保证您试图添加到映射中的任何内容都与该未知类型兼容。@Florian同意您的看法,这是一种更好的表达方式。