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