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

Java 最近有没有什么黑科技

  •  
  •   chenguoyu · 2018-01-25 21:31:40 +08:00 · 17403 次点击
    这是一个创建于 2254 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最好能说出作用是什么,如果能够附上一个博客链接就更好了。 我先说一个lombok,可以不写 set/get,而且可以不关闭流了。虽然挺早就出现了,不过我还是最近才得知

    105 条回复    2018-01-31 09:46:31 +08:00
    1  2  
    alamaya
        1
    alamaya  
       2018-01-25 21:37:48 +08:00
    感觉跟你不是生活在同一个时代的
    lhx2008
        2
    lhx2008  
       2018-01-25 21:39:18 +08:00 via Android   ❤️ 2
    jdk9 的 jshell
    WPalle
        3
    WPalle  
       2018-01-25 21:39:52 +08:00
    这是啥年代的最新
    chenguoyu
        4
    chenguoyu  
    OP
       2018-01-25 21:43:29 +08:00
    @WPalle 可能我待的城市技术太落后了吧,我这边还没几家公司用上
    lihongjie0209
        5
    lihongjie0209  
       2018-01-25 21:46:11 +08:00
    lombok 要装插件的, 你怎么可能让同事都装插件呢
    chenguoyu
        6
    chenguoyu  
    OP
       2018-01-25 21:51:02 +08:00
    @lihongjie0209 从项目经理入手,告诉他们这样可以开发效率更高,可以给公司赚更多的钱。我公司的架构师估计就是这么搞的,所以现在用上了
    huclengyue
        7
    huclengyue  
       2018-01-25 21:56:35 +08:00 via Android   ❤️ 1
    最新的黑科技就是 kotlin 了。。。。
    LukeChien
        8
    LukeChien  
       2018-01-25 22:13:17 +08:00 via Android   ❤️ 4
    sun 被 oracle 收购了
    lxy
        9
    lxy  
       2018-01-25 22:19:16 +08:00   ❤️ 1
    getter/setter,空构造或非空构造都可以通过 IDE 自动补全,全程可键盘操作,intellij 快捷键 alt+insert。自动关闭流可以用 try-with-resources。
    idamien
        10
    idamien  
       2018-01-25 22:23:58 +08:00
    请不要提 lombok 这个垃圾了好么
    BBCCBB
        11
    BBCCBB  
       2018-01-25 22:27:11 +08:00
    @idamien 说出你的故事
    zjp
        12
    zjp  
       2018-01-25 22:55:11 +08:00 via Android   ❤️ 1
    一直好奇 lombok 比 alt+insert 方便吗,前者还要侵入代码
    hand515
        13
    hand515  
       2018-01-25 22:57:45 +08:00
    lombok 是把双刃剑
    zhx1991
        14
    zhx1991  
       2018-01-25 23:19:40 +08:00
    jvm 到处都是黑科技啊
    somebody
        15
    somebody  
       2018-01-25 23:38:00 +08:00
    kotlin
    cuebyte
        16
    cuebyte  
       2018-01-25 23:43:02 +08:00
    jigsaw
    nl101531
        17
    nl101531  
       2018-01-25 23:58:03 +08:00 via Android
    lombok 简直是神器啊
    Betsy
        18
    Betsy  
       2018-01-26 00:35:44 +08:00 via Android
    其实我想问下,在使用 lombok 的前提下,怎么给 set/get 加注解?
    Bryan0Z
        19
    Bryan0Z  
       2018-01-26 00:47:18 +08:00 via Android   ❤️ 1
    @LukeChien 那 Solaris 是不是停止维护
    idamien
        20
    idamien  
       2018-01-26 01:01:58 +08:00
    @BBCCBB lombok 这个垃圾 装上之后 你之前要是有项目没用它,用 eclipse 打开的时候,选择插入代码会报错。 而且不就是个 get set 嘛 自己自动生成下好了 根据自己需要,用它完全是累赘 卵用没有
    xupefei
        21
    xupefei  
       2018-01-26 01:14:18 +08:00
    我平时写 C# 写 Scala 太爽,写 Java 一定要用 lombok。现在的遗憾是它对 var 的支持不太好。
    ke1e
        22
    ke1e  
       2018-01-26 01:21:01 +08:00 via Android
    感觉还是 idea 滚键盘快,但是 lombok 的优点是之后再添加属性也会有,不用还要再滚次键盘
    sagaxu
        23
    sagaxu  
       2018-01-26 01:36:05 +08:00   ❤️ 6
    lombok 会侵入代码,lambda 也是侵入,stream 也是侵入,foreach 也是侵入,Java 6 可以用到天荒地老
    liuzuo
        24
    liuzuo  
       2018-01-26 03:14:27 +08:00
    @lihongjie0209 我是架构我说了算😂系列
    danielzhang0212
        25
    danielzhang0212  
       2018-01-26 05:38:33 +08:00
    kotlin 多好
    dizhang1109
        26
    dizhang1109  
       2018-01-26 05:47:44 +08:00   ❤️ 2
    有用 groovy 的朋友吗?虽然开发环境用 groovy 的不多,但写单元测试或者自动化测试,用 groovy 的效率提高几倍。
    zzlhr
        27
    zzlhr  
       2018-01-26 08:01:35 +08:00 via iPhone
    Lombok ?每月总有那么几天!
    wizardforcel
        28
    wizardforcel  
       2018-01-26 08:18:59 +08:00 via Android
    java9 的 aot 和 kotlin 混合编程
    ihuotui
        29
    ihuotui  
       2018-01-26 08:21:36 +08:00 via iPhone
    g1 垃圾回收器
    Cbdy
        30
    Cbdy  
       2018-01-26 08:46:19 +08:00 via Android
    Java 10 类型推断

    var s = "一个字符串";
    liuhuansir
        31
    liuhuansir  
       2018-01-26 08:47:44 +08:00
    Lombok 这个渣渣卵用没有,推荐这个的同学是不是天天在写 pojo 类?你真当自己是打字员么?用快捷键需要几秒?
    nl101531
        32
    nl101531  
       2018-01-26 08:52:44 +08:00 via Android
    nl101531
        33
    nl101531  
       2018-01-26 08:53:11 +08:00 via Android
    @liuhuansir lombok 远比快捷键方便。
    Sypher
        34
    Sypher  
       2018-01-26 08:57:53 +08:00
    Lombok 真没必要推广。会被喷的
    chenguoyu
        35
    chenguoyu  
    OP
       2018-01-26 08:58:56 +08:00
    @ihuotui g1 收集器已经完善了吗?记得深入理解 java 虚拟机里面写 java7 才出的商业版,但是具体如何还不知道
    stanjia
        36
    stanjia  
       2018-01-26 09:08:26 +08:00
    Lombok 的优点难道不是他的 setter 最后会 return this 么?

    new Person()
    .setName('baba')
    .setAge(18);
    lihongjie0209
        37
    lihongjie0209  
       2018-01-26 09:11:29 +08:00
    @liuzuo #24 6666
    lihongjie0209
        38
    lihongjie0209  
       2018-01-26 09:13:09 +08:00
    @stanjia #36 这是链式构造, 有 builder 插件可以直接生成代码, 其次, 这种不符合 pojo 规范, 不太敢用
    amon
        39
    amon  
       2018-01-26 09:13:55 +08:00   ❤️ 1
    lombok 让 java 程序员擅长的代码行数大大降低,kpi 直线下降,请不要推广,谢谢!
    junbaor
        40
    junbaor  
       2018-01-26 09:17:35 +08:00
    @amon #39 又一个使用代码行数计算 kpi 的案例
    jlkm2010
        41
    jlkm2010  
       2018-01-26 09:28:46 +08:00
    vert.x
    sagaxu
        42
    sagaxu  
       2018-01-26 09:35:09 +08:00 via Android
    @chenguoyu 再过几个月都 java 10 了,g1 的下一代 gc 已经在路上了
    ipeony
        43
    ipeony  
       2018-01-26 09:39:17 +08:00
    @lihongjie0209 #38 它有 @Builder 注解,可以生成标准 builder 模式的
    RuzZ
        44
    RuzZ  
       2018-01-26 09:53:03 +08:00
    dubbo 合并了 dubbo.x,官方已经放出 release 了
    baoanlol
        45
    baoanlol  
       2018-01-26 09:57:39 +08:00   ❤️ 1
    用 lombok 最爽的是可以写 val,这样不用写超级长的类型啊,特别是 Map 里面有个 list 之类的。(没错,我就是 scala 支持者)

    进公司一开始是写 scala 的,后来项目停止换到另外一个项目开始写 java,到现在一年多了,还是各种用起来难受,特别是 java 那个 stream。。。。
    Lullaby
        46
    Lullaby  
       2018-01-26 10:06:27 +08:00
    orangeD
        47
    orangeD  
       2018-01-26 10:08:57 +08:00   ❤️ 1
    打开一个类看到一堆毫无意义的 getter/setter 就想吐,lombok 成功解救了我。
    kylefeng
        48
    kylefeng  
       2018-01-26 10:09:29 +08:00
    jjianwen68
        49
    jjianwen68  
       2018-01-26 10:19:51 +08:00
    目前我用 lombok,只用在 pojo 上,以及注解日志。pojo 看起来整洁了很多。强迫症福音
    swim2sun
        50
    swim2sun  
       2018-01-26 10:27:09 +08:00   ❤️ 7
    一开始看到那么人多喷 lombok 很诧异,很多人竟然只是因为要给 ide 装个插件就放弃了 lombok
    但站在他们的角度想想,也许他们确实不太需要 lombok,如果你仍然用着 N 层架构,项目里就是一堆 service, dao, pojo 的话,那 getter/setter 方法全部集中在了 pojo 里,这种情况下 lombok 的意义确实不大,因为你根本不会在意 pojo 里有哪些函数。
    但是,如果你恰好了解领域驱动设计( DDD ),你不满足于贫血模型,开始实践充血模型,那么你的实体类里不但会有 getter/setter,还会有很多业务方法。这个时候你就会觉得那些 getter/setter 很多余、能自动生成的代码最好应该是在编译的时候生成,这是你发现 lombok 是个大救星。当然 lombok 的功能不只是生成 getter/setter,安装插件这个小小的麻烦与它带来的收益相比根本不算什么。
    xarrow
        51
    xarrow  
       2018-01-26 10:48:00 +08:00
    kotlin 支持协程
    pizida
        52
    pizida  
       2018-01-26 11:12:42 +08:00
    @huclengyue 高级黑呀!
    Len1133
        53
    Len1133  
       2018-01-26 11:18:21 +08:00
    lombok 对代码的简洁还是很有帮助的,getter/setter 的代码本来就不该出现在项目里
    paragon
        54
    paragon  
       2018-01-26 11:24:05 +08:00
    @swim2sun 对于 json.get 神教明显没作用…… 好奇的是他们为什么不转 python ……
    Amayadream
        55
    Amayadream  
       2018-01-26 11:27:55 +08:00
    拿 lombok 和 ide 快捷键相比实在是不敢苟同, 个人认为 lombok 最大的作用是删除了大量的冗余代码(getter/setter/slf4j 等), 使得原来非常臃肿的类看起来简洁明了, 简直是强迫症的福音.
    mosliu
        56
    mosliu  
       2018-01-26 11:32:40 +08:00
    lombok 是好东西
    不过这啥年代的?
    genesys
        57
    genesys  
       2018-01-26 11:35:33 +08:00
    @swim2sun 即使实践充血模型,这些 getter / setter 是不是看起来不爽还是因人而异的。在简洁性和代码侵入性之间不同人有不同的选择。当然个人感觉 lombok 为 Java 语言特性的演进提供了很好的启示。
    ZhLTE
        58
    ZhLTE  
       2018-01-26 11:39:52 +08:00
    c#6.0 还是 7.0 支持了这一特性
    xuhaoyangx
        59
    xuhaoyangx  
       2018-01-26 11:40:31 +08:00
    java 对不定格式的 json 处理真麻烦
    lihongjie0209
        60
    lihongjie0209  
       2018-01-26 11:51:10 +08:00
    @swim2sun #50 不是某个人的问题, 是你用了 lombok 之后所有同事必须装插件, 你怎么说服他们? 技术推广从来不是技术的问题, 是人的问题.
    vjnjc
        61
    vjnjc  
       2018-01-26 11:56:41 +08:00
    如果想自动完成 get/set 用 idea 的生成器。
    如果想不写 get/set,用 groovy 混编。
    swim2sun
        62
    swim2sun  
       2018-01-26 12:01:42 +08:00
    @lihongjie0209 我们团队使用微服务架构,一个服务主要由一个人主导开发,最多不会超过三个人参与,所以推广的成本小,并不是“所有同事”都必须装插件。而且我的同事在使用 lombok 后都表示好用。所以你说的问题还是看环境吧,如果你的环境确实不适合使用 lombok 那就不用,但因此而批评 lombok 的话就不合理了。
    janus77
        63
    janus77  
       2018-01-26 12:15:02 +08:00
    看了这么多层,好多吐槽 lombok 的,但是一直没看到让人信服的论据,你们倒是举个栗子啊……我真的,一个都没看出来。
    至于那些违反规范……让人变懒……你觉得这真的像个正经栗子吗
    stanjia
        64
    stanjia  
       2018-01-26 12:27:40 +08:00
    @vjnjc groovy 混编 黑科技求分享
    ming7435
        65
    ming7435  
       2018-01-26 13:05:13 +08:00
    我一直弄不明白为啥要用 lombok,一键生成 setter/getter 有什么不好?非得强制别人也装插件
    wallriding
        66
    wallriding  
       2018-01-26 13:12:28 +08:00
    有些程序员吧,你让他装个插件,他觉得天都要塌了:“居然*强制*我装插件?!”
    装个插件难道不是两分钟的事情么
    choice4
        67
    choice4  
       2018-01-26 13:28:50 +08:00
    @lhx2008 老哥了解 jdk9 的 javax.annoatation 模块不可见怎么解决吗?@Resource 注解已拉闸 除了降 8 还有没有别的办法
    sggzh
        68
    sggzh  
       2018-01-26 13:53:17 +08:00
    vavr
    zpf124
        69
    zpf124  
       2018-01-26 14:07:12 +08:00
    为什么 装插件不是一个问题, 如果 lombok 仅仅是个 maven 插件或者 git submodel,那毫无疑问我支持他。

    这就和 你写了一个 word,然后告诉别人 想看这个 word,请先去下个 360 解压工具,然后才可以看。
    sagaxu
        70
    sagaxu  
       2018-01-26 14:23:26 +08:00
    @lihongjie0209 需要推广吗? maven/gradle 编译又不会报错。IDE 里出错他们自己会解决。
    @zpf124 什么?还要 word ?很多时候纯文本就能搞定的事情,你还要让我装个 word 才能看?
    @wallriding 如果同事里很多这种装个插件都抱怨的,首先要考虑的不是怎么推广,是怎么跳槽。
    vexjoe
        71
    vexjoe  
       2018-01-26 14:43:15 +08:00
    @sggzh 这个厉害了
    lihongjie0209
        72
    lihongjie0209  
       2018-01-26 14:46:34 +08:00
    @sagaxu #70
    别的同事没理由因为你提交的代码就去专门装一个插件
    别的同事也没理由因为你提交的代码就去看 lombok 的文档
    tairan2006
        73
    tairan2006  
       2018-01-26 14:48:40 +08:00
    lombok 的 @ToString @Data 你们没用过么…啥只有 getter setter,兼职 naive
    lihongjie0209
        74
    lihongjie0209  
       2018-01-26 14:51:29 +08:00
    @sagaxu #70
    因为一个插件, 你要浪费其他同事多少时间?
    出了 BUG 的负责改吗?
    文档看不懂你负责教吗?
    我当然同意 lombok 是个好东西, 不然我也不会在这里和你讨论.
    自己的项目怎么搞无所谓, 但在工作上别给别人添麻烦.
    不是所有的开发都喜欢新技术, 特别是这种已经有解决方案的新技术
    deadEgg
        75
    deadEgg  
       2018-01-26 14:58:04 +08:00
    没看到什么我认为的“黑科技”。

    倒是因为工具吵起来了。
    Mogugugugu
        76
    Mogugugugu  
       2018-01-26 15:38:10 +08:00
    就问一句:leader 说用 lombok,有几个人会因为不想装插件或者不想看文档 而 选择离职 的?
    lihongjie0209
        77
    lihongjie0209  
       2018-01-26 15:40:59 +08:00
    @Mogugugugu #76 我说的是同事, 不是上下级关系. 当领导怎么干都随意, 工资给到就好了.
    zpf124
        78
    zpf124  
       2018-01-26 15:46:00 +08:00
    @sagaxu 拿纯文本举例那也行啊, 我传给你的 md 文件, 结果内容都是 非标准 markdown 语法,某第三方厂商的方言扩展, 然后我告诉你必须去下个 支持我用的这个方言的渲染器。
    sagaxu
        79
    sagaxu  
       2018-01-26 15:58:06 +08:00
    @lihongjie0209 我推过很多东西,阻力并没有你想象的那么大。

    我推过 springboot,反馈都是正面的。推过 vue,稍微指导了一下,很快大家都上手了。lombok 是跟 springboot 一起推的,没人提出过异议。推 coffeescript 遭到了抵抗,我也没坚持,强推的瓜不甜。是给人添麻烦,还是大家一起提高效率,因团队而异,只有做了才知道。
    lihongjie0209
        80
    lihongjie0209  
       2018-01-26 16:03:34 +08:00
    @sagaxu #79 你说的对.
    jy02405651
        81
    jy02405651  
       2018-01-26 16:54:37 +08:00
    看了全部回复~没看一个正经的黑科技!
    zjp
        82
    zjp  
       2018-01-26 17:01:11 +08:00 via Android
    #12 没想到都在争论 lombok
    感谢#49 解决了我的疑惑…
    hantsy
        83
    hantsy  
       2018-01-26 17:22:27 +08:00
    @jy02405651 这个也太复古了。。。之前项目用过 modelmapper,mapstruct,不过现在力求在 Pojo 设计上尽量用一些 DDD 概念,这些 Mapper 显得有点累赘了。
    hantsy
        84
    hantsy  
       2018-01-26 17:23:31 +08:00
    @wizardforcel 这个有例子吗?
    hantsy
        85
    hantsy  
       2018-01-26 17:31:46 +08:00   ❤️ 1
    Lombok 这个项目用了好多年,现在 Spring 官方的 Spring Cloud 官方项目中都已经用了。

    编译时(运行时不需要),其利用 Java Compiler APT 特性在 java classes 中加入一些常见辅助方法等。除了 Getter,Setter 外,Builder,ToString,hashCodeAndEquals, Data,Slf4j, 三个 XXXContrcutor 都很常用。

    类似的工具很多,AutoValue,Immutables 等。

    https://dzone.com/articles/lombok-autovalue-and-immutables
    hantsy
        86
    hantsy  
       2018-01-26 17:35:35 +08:00
    @sagaxu CoffeeScript 我也觉得难受,难道是为写 Python 的人准备的吗?之前一个 AngularJS 1.5 项目从 CoffeeScript 切换到 ES 6,舒服多了。
    hantsy
        87
    hantsy  
       2018-01-26 17:37:11 +08:00
    @xupefei Java 10 应该会引入 Local Variable 的 var 声明支持,感觉这些是动态语言才有的特性。暂时只能用 Kotlin 之类的玩玩。
    hantsy
        88
    hantsy  
       2018-01-26 17:45:12 +08:00   ❤️ 1
    @lihongjie0209
    文档都看不懂???
    安装个 Lombok 插件有那么难?对于 IDEA,Eclipse 有相应的插件,NetBeans 根本不需要插件自动启用了 APT。
    这是新技术? Lombok 仅仅只是利用 Java Compiler 的 APT 特性而已,这个特性是 2004 年 Java 5 年加入的,至今 14 年了。稍微花几分钟了解一下 APT 就可以理解 Lombok 是做什么的。
    lihongjie0209
        89
    lihongjie0209  
       2018-01-26 17:49:27 +08:00
    @hantsy #88 正常做项目都要加班, 你还要同事去学新东西, 我是不敢这么干的, 至于说用了 lombok 能带来多大的效率, 这个见仁见智
    hantsy
        90
    hantsy  
       2018-01-26 17:51:30 +08:00
    @dizhang1109 Geb,Spock ?很少用。Geb 用过一次。Spock 的一些概念好像 JUnit 5 也有了。
    hantsy
        91
    hantsy  
       2018-01-26 17:59:59 +08:00
    @lihongjie0209 那是你们项目没有人推动技术和工具,对于项目管理基本上靠吼的团队来说很正常,只要有一点技术的东西都认为是项目进度的障碍。这样的团队我可以理解,因为团队里没人知道工具来带来的效率。
    viakiba
        92
    viakiba  
       2018-01-26 18:05:05 +08:00
    lombok 我们只用一个 @Log4j 注解,setter/getter 需要用来打断点不能省
    wizardforcel
        93
    wizardforcel  
       2018-01-26 18:22:33 +08:00
    @lihongjie0209 请你把你们的 pom.xml 发出来让大家看看用了多少库。我敢保证 lombok 的 api 比里面大多数都少。
    lihongjie0209
        94
    lihongjie0209  
       2018-01-26 18:41:22 +08:00
    统一回复一下:
    1. 我用过 lombck, 但是没有在同事之间推广, 因为它入侵代码还要装插件.
    2. lombck 解决的问题并不是没有解决方案的, ide 自动生成也没有多难, 所以并没有使用 lombok 的需求.
    3. 学习 lombck 是有个过程的, 包括试错以及个人的学习能力, 在已有的自动生成代码非常稳定以及熟悉的情况下, 没有必要引入新的东西.
    4. 这种东西感觉没什么讨论的意义, 与公司的环境有很大关系, 后面的内容不再回复了.
    lihongjie0209
        95
    lihongjie0209  
       2018-01-26 18:44:11 +08:00
    aristotll
        96
    aristotll  
       2018-01-26 19:17:36 +08:00
    @lihongjie0209 #94 你的几点都站不住脚的 入侵代码 getter setter 才是 装插件之类也是醉了

    你的同事连 lombok 的学习能力都没吗

    如果是遗留代码的确没必要加 但是新代码加绝对没问题的
    laodao1990
        97
    laodao1990  
       2018-01-26 19:26:51 +08:00
    我嚓嘞!楼主明明好意讨论下 java 新技术,咋变成 lombok 攻防战了。。。
    wallriding
        98
    wallriding  
       2018-01-26 19:53:18 +08:00
    觉得看个 lombok 的文档也能算学习成本的人也基本上属于弱智了
    chocotan
        99
    chocotan  
       2018-01-26 21:17:50 +08:00
    lombok 好东西+1,自己的小项目在用,领导也觉得不错,缺点楼上们也说了要装插件
    winglight2016
        100
    winglight2016  
       2018-01-26 21:33:32 +08:00
    用 playframework 的一笑而过~~~
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5491 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 01:37 · PVG 09:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.