最近很烦各种参数初始化

2018-04-02 18:31:37 +08:00
 lxy

举个例子

Map<String, String> sqlParam = new HashMap<String, String>() {{
   put("userId", userId);
   put("roleId", roleId);
   put("password", password);
   // etc ...
}};

像这种双大括号初始化会产生内部类文件,听说数量多了会影响运行速度。但是不用{{又很麻烦,连续写几次 sqlParam.put 就感觉十分难受。其它语言如 js 有 with,Python、PHP 可以直接 dictName[key]赋值,C#可以连写。

是使用 Java 姿势不对还是本来就这么麻烦?

2850 次点击
所在节点    Java
16 条回复
broadliyn
2018-04-02 19:32:44 +08:00
奇葩了,写了这么多年还有 lz 这种双花括号的 java 写法????
难道你的 ide 就去没有报语法错误??
willvvvvv1
2018-04-02 19:36:42 +08:00
@broadliyn 了解一下再开喷,兄弟。
lhx2008
2018-04-02 19:37:25 +08:00
@broadliyn 内部类了解一下,里面的{}是初始化块
@lxy 感觉如果重载了[]符,又会引出各种各样的问题了,还是单纯的面向对象好点
broadliyn
2018-04-02 19:37:26 +08:00
刚看了下,的确还真有这种写法。。https://www.jianshu.com/p/0ed87e80413e
不太了解,为什么不直接 put ?

Map<String, String> sqlParam = new HashMap<String, String>();
map.put("userId", userId);
map.put("roleId", roleId);
map.put("password", password);

还省了一行代码
whitev2
2018-04-02 19:38:54 +08:00
扔 IDEA 里去试了,还真没有报错
hcymk2
2018-04-02 19:46:10 +08:00
试下 java9
zjp
2018-04-02 19:50:00 +08:00
应该说静态语言都这样吧,而且 Java 类库的方法一般不会返回自身,也不能链式调用了
FreeEx
2018-04-02 19:52:27 +08:00
Java 这点就是很烦,有种简单粗暴的办法就是写 json 反序列化成 map。
sagaxu
2018-04-02 20:08:33 +08:00
java 9 有 Map.of ,但是仍然不如 Kotlin 的 mapOf/mutableMapOf 方便。java 语法没救了,换 kotlin 或者 scala 吧。
ssynhtn
2018-04-02 20:32:12 +08:00
第一次知道有这种写法...
不过查了一下原来只是匿名内部类和初始化块结合而已...
yidinghe
2018-04-02 21:03:39 +08:00
双括号就是匿名内部类,没什么特别的。用个 Builder 类来创建 Map 也是可行方法,写出来比匿名内部类还简洁些。
reid2017
2018-04-02 21:18:20 +08:00
我也是第一次看这种写法。不过,实话说,习惯了 Java 这种严谨语法,最近在学习 python go 这类的函数式编程语言,各种不习惯
searene
2018-04-02 21:24:24 +08:00
其实你先声明变量再 put 的话也就多了一行而已,写起来不费什么劲,读起来更是毫无压力,纠结这多出的一行根本没有任何意义。读代码的速度和代码的行数没有必然联系。
narcotics
2018-04-02 22:20:43 +08:00
`ImmutableMap.of` 试试,没记错的话是 Guava 里的一个辅助类
WildCat
2018-04-02 22:35:05 +08:00
学习了,还有这种学法,白上了一年 20W 的 Java 培训班 🤪
starmoon1994
2018-04-03 11:26:00 +08:00
工厂模式了解一下

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

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

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

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

© 2021 V2EX