Map, List 写死类型和不写有什么区别?

2019-06-18 16:53:32 +08:00
 aoscici2000

比如我传入的数据{"name": "...", "age": 90 ...}

1: public String saveOne(Map<String, Object> data) { ... }

2: public String saveOne(Map data) { ... }

1 和 2 有什么区别?

4881 次点击
所在节点    Java
34 条回复
chendy
2019-06-18 20:19:10 +08:00
@aoscici2000 必须要找到所有的 get 和 put 否则不知道里面有什么
Raymon111111
2019-06-18 20:39:15 +08:00
从代码运行的角度是完全没区别的

但是还推荐加, 因为可以保证传入的类型, 你也不希望你认为 get 出一个 String 结果是个 int 吧
gam2046
2019-06-18 20:39:56 +08:00
对于 Java 来说没有任何区别,Java 的泛型是基于类型擦除实现的,本身就是一个伪泛型,只是编译器帮你做了强制类型转换。
cheng6563
2019-06-18 20:41:44 +08:00
@chendy map 接 json 有啥问题啊
zjsxwc
2019-06-18 20:44:20 +08:00
用朴素的解释来说区别就是,
被调用者 与 调用者 之间的“约定” 不一样,
如果被调用者完全不关心入参具体类型,例如仅仅只是做数值运算或者缓存等,那么用 Map ;
如果被调用者对入参具体类型有要求,那么用对应 json 字符串的 Class,别用 Map<String, Object>;


楼主的 saveone 明显是数据库操作
zjsxwc
2019-06-18 20:44:52 +08:00
楼主的 saveone 明显是数据库操作,还用 map 不是找骂吗?
aoscici2000
2019-06-18 21:10:15 +08:00
@zjsxwc 传进来的数据一大堆数组需要计算后才保存,感觉直接用 map 还方便点,确实被骂了一顿...
luozic
2019-06-18 21:12:19 +08:00
JMH 基准测试一下。
20015jjw
2019-06-18 23:14:14 +08:00
学一下基本的东西再写啊..
aoscici2000
2019-06-18 23:54:21 +08:00
@20015jjw 呃...基础都看了,看完就容易忘了, 难道边写边学不是比较有效的方式嘛
Takamine
2019-06-18 23:55:03 +08:00
不如形参类型也都用 Object o 好了。:doge:
HongJay
2019-06-18 23:58:50 +08:00
@aoscici2000 所以被喷也要坦然接受。
EminemW
2019-06-19 01:10:10 +08:00
想知道为什么接 json 不直接用 JSONObject
nnnToTnnn
2019-08-05 16:59:52 +08:00
没啥区别,最后编译出来的 class 也没有泛型的,其实 Java 对于编译器而已,是没有所谓的泛型,都是强制类型转换过去的

编写阶段
public String saveOne(Map<String, Object> data) { ... }

编译成 class 后
public String saveOne(Map data) { ... }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575169

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX