[英]Difference between MAP in Groovy and Java
目前,我们使用 Groovy 作为前端,Java Spring 作为后端。
在 groovy 中,我们定义了一个属性Map parameters = [:]
,它将分配给private Map<String, Object> parameters;
在 Java。
我对这两种语言的 MAP 接口的实例有疑问。 当我阅读 groovy 默认创建LinkedHashMap
实例和 Java 默认创建HashMap
实例时,这是真的吗?
我的总体要求是保留数据的顺序, LinkedHashMap
会这样做,但HashMap
不会。
因此,由于前端已经是LinkedHashMap
,它会将有序数据传递到后端。
public void setParameters(Map<String, Object> parameters) {
this.parameters = parameters;
}
是真的吗? 我是否需要将 JAVA(后端)中的 model 从Map
为LinkedHashMap
?
当我阅读 groovy 默认创建 LinkedHashMap 实例和 Java 默认创建 HashMap 实例时,这是真的吗?
Java,事实上,默认情况下不会创建任何类型的 map。 开发人员选择他们实例化的Map
实现(几乎总是)。 Java 没有对应于 Groovy 的 map 文字[:]
,因此没有“默认”类型可以在 Java 中实例化。至于 Groovy,map 文字确实创建了一个LinkedHashMap
:
groovy:000> [:].getClass()
===> class java.util.LinkedHashMap
因此,由于前端已经是 LinkedHashMap,它会将有序数据传递到后端。 [...] 这是真的吗?
是的。 在运行时,传递给setParameters()
的Map
object 将由您的“前端”代码生成。 该调用的行为方式与您从 Java 代码创建LinkedHashMap
并将其传递给该方法一样。 运行时不会将 object 重新整形为HashMap
(即使它必须做类似的事情,使它成为HashMap
也很随意)。 这里重要的是类型兼容, LinkedHashMap
是Map
。
Map
是一个接口。 因此,如果您需要Map
作为参数或参数,您只是在请求这些保证。
如果您需要进一步的保证(例如 LinkedHashMap 保留插入顺序),那么您最好明确地请求它。
由于您在谈论“后端”和“前端”,因此两者之间还有传输问题。 如果您正在使用无法在地图(例如 JSON)中保持顺序的传输(而不是直接调用),那么您最好不要依赖不同的数据类型。 例如,改用键值元组列表。
Groovy 有一个文字来快速创建地图( [:]
或 forms 带有像[a: 42]
这样的键)。 正如您所说,这些地图是LinkedHashMap
。
groovy:000> [:].getClass()
===> class java.util.LinkedHashMap
由于 Java 最多 15 没有地图文字,因此没有“默认” - 默认是您制作的。
一般来说,最好始终考虑您实际需要的数据类型。 这也意味着 Groovy 的 map 文字可能是错误的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.