首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉钩
V2EX  ›  Java

最近很烦各种参数初始化

  •  
  •   lxy · 255 天前 · 1790 次点击
    这是一个创建于 255 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举个例子

    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 条附言  ·  255 天前
    更烦的是,当内部类访问局部变量时,局部变量必须声明为 final (或实际上之后没有改动),所以有时候还不能直接用...
    刚开始写 Java 的时候觉得嗯是个很严谨的语言,现在觉得怎么这么麻烦,唉╮(╯▽╰)╭
    16 回复  |  直到 2018-04-03 11:26:00 +08:00
        1
    broadliyn   255 天前
    奇葩了,写了这么多年还有 lz 这种双花括号的 java 写法????
    难道你的 ide 就去没有报语法错误??
        2
    willvvvvv1   255 天前
    @broadliyn 了解一下再开喷,兄弟。
        3
    lhx2008   255 天前
    @broadliyn 内部类了解一下,里面的{}是初始化块
    @lxy 感觉如果重载了[]符,又会引出各种各样的问题了,还是单纯的面向对象好点
        4
    broadliyn   255 天前
    刚看了下,的确还真有这种写法。。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   255 天前
    扔 IDEA 里去试了,还真没有报错
        6
    hcymk2   255 天前
    试下 java9
        7
    zjp   255 天前 via Android
    应该说静态语言都这样吧,而且 Java 类库的方法一般不会返回自身,也不能链式调用了
        8
    FreeEx   255 天前 via Android
    Java 这点就是很烦,有种简单粗暴的办法就是写 json 反序列化成 map。
        9
    sagaxu   255 天前 via Android
    java 9 有 Map.of ,但是仍然不如 Kotlin 的 mapOf/mutableMapOf 方便。java 语法没救了,换 kotlin 或者 scala 吧。
        10
    ssynhtn   255 天前 via Android
    第一次知道有这种写法...
    不过查了一下原来只是匿名内部类和初始化块结合而已...
        11
    yidinghe   255 天前 via Android
    双括号就是匿名内部类,没什么特别的。用个 Builder 类来创建 Map 也是可行方法,写出来比匿名内部类还简洁些。
        12
    reid2017   255 天前
    我也是第一次看这种写法。不过,实话说,习惯了 Java 这种严谨语法,最近在学习 python go 这类的函数式编程语言,各种不习惯
        13
    searene   255 天前
    其实你先声明变量再 put 的话也就多了一行而已,写起来不费什么劲,读起来更是毫无压力,纠结这多出的一行根本没有任何意义。读代码的速度和代码的行数没有必然联系。
        14
    narcotics   255 天前
    `ImmutableMap.of` 试试,没记错的话是 Guava 里的一个辅助类
        15
    WildCat   255 天前
    学习了,还有这种学法,白上了一年 20W 的 Java 培训班 🤪
        16
    starmoon1994   255 天前
    工厂模式了解一下
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3273 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 17ms · UTC 05:17 · PVG 13:17 · LAX 21:17 · JFK 00:17
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1