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

为什么 Java 开发没有普遍使用 kotlin

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

    我周围的情况是基本没有 java 开发使用 kotlin ,基本都是移动端( Android )在是用,好奇为什么…

    第 1 条附言  ·  92 天前
    1. 希望大家友好讨论
    2. 用kotlin不一定代表所有代码都需要切换到kt,我只是个人感觉kt里有很多特性很省事,当然代码易读性确实不如java
    第 2 条附言  ·  92 天前
    没有想引战,单纯好奇,遂想讨论一下
    129 条回复    2022-03-28 23:35:27 +08:00
    1  2  
    zxCoder
        1
    zxCoder  
       93 天前
    (又不是不能用
    nicevar
        2
    nicevar  
       93 天前
    Kotlin 相对 Java ,优势基本上在语法上,Java 有 IDE Buf 加持的情况下,用起来不比 Kotlin 弱,我就是做安卓用 Kotlin ,后端依然用 Java ,没必要折腾,现在我甚至有点后悔把安卓一些封装的库转为 Kotlin 了。
    debuggeeker
        3
    debuggeeker  
       93 天前
    @nicevar 库还是 java 好,因为有些项目如果不支持 kt ,还能用。特别是老项目,我觉得没有必要纠结用啥。该用就用,前提是都得会。
    ciki
        4
    ciki  
       93 天前
    Java8 以上很香,kt 没啥优势
    witcherhope
        5
    witcherhope  
       93 天前
    只是加了些语法糖,而语法糖这个东西够用就好
    olaloong
        6
    olaloong  
       93 天前   ❤️ 4
    Android 的 Java 不是标准的 Java ,换 Kotlin 确实更好用了
    后端有换 Kotlin 的功夫不如提升一下 Java 版本
    changdy
        7
    changdy  
       93 天前   ❤️ 1
    java 有完备的模板引擎?
    lambda 功能真的齐全?
    为什么已经实现了 Comparable 还不能用 大于小于符号 ?


    不否认 java 生态圈比较齐全...但是 真心感觉 java 写起来啰嗦...
    Huelse
        8
    Huelse  
       93 天前   ❤️ 5
    激进的已经 scala 一步到位了
    yazinnnn
        9
    yazinnnn  
       93 天前
    我在用,然后我同事看不懂我写的啥。

    再者,大家都是 spring boy ,而 kotlin 对于 spring 来说又没有明显增强的特性。reactor coroutine 算一个吧,但是你见过用 webflux 和 r2dbc 的人吗?
    leighton
        10
    leighton  
       93 天前 via iPhone   ❤️ 1
    AWS 某偏核心组,以前大部分是 cpp 和 java ,现在新代码都是 rust 和 kotlin 了。不过 kotlin 语法糖太多,我看别人写的代码有点吃力
    haython
        11
    haython  
       93 天前   ❤️ 3
    以前试过 kotlin ,然后 3 个人写出 3 个风格,互相难看懂
    yazinnnn
        12
    yazinnnn  
       93 天前   ❤️ 1
    我工作的常备工具库是 coroutine+vertx+arrowkt ,协程还好说,vertx 和 arrow 这两个 monad 风的库一般人接受不了啊,只能自己写着开心了。
    hidemyself
        13
    hidemyself  
       93 天前
    因为 Java 有 Spring ,都快一统天下了
    Mateverse
        14
    Mateverse  
    OP
       93 天前
    @yazinnnn spring boy 太真实了哈哈哈哈
    @haython 真的,感觉 kotlin 代码没备注读起来是有点…
    nothingistrue
        15
    nothingistrue  
       93 天前
    虽然都是基于 Java ,但面向前端 UI 的生态,跟面向后端的生态之间的区别,要比跨语言还大。kotlin 毕竟是从 Android 出发的,后端一时半会不会用。

    还有另一方面,Java 太大了,Android 部分,和 Web 后端部分,只是最流行的(或者说搜索引擎上搜索最多的),但可能连 Java 总生态的 1/3 范围都没占到。(比如说,Mysql 数据库、Oracle 数据库中的 Java 部分、Hadoop 、Storm ,这些都是 Java 开发的,即没有用 kotlin 也没有用 spring 。)这直接导致除了基本 JDK ,很难有框架能一统天下。就是 JDK ,因为 JCP 基本上被 Oracle 独家控制了,也快分裂成 JDK-current 跟 JDK8 两套了。
    whyrookie
        16
    whyrookie  
       93 天前
    Android 用 Kotlin 确实很舒服,毕竟谷歌定下的官方语言,有很多生态上的支持,后端不清楚,Kotlin 的语法比较花哨,确实可能出现不同人写出的代码风格差别很大的情况。我还是很喜欢 Java 的,严谨,风格统一,只是前端(包括客户端)有很多页面,感觉用 Java 写太繁琐了
    fredli
        17
    fredli  
       93 天前
    因为懒啊,除了 Android ,Java 又不是不能用
    echo1937
        18
    echo1937  
       93 天前
    @nothingistrue #15 不太懂为什么说 JCP 是 Oracle 独家控制的。
    https://jcp.org/en/participation/committee
    bthulu
        19
    bthulu  
       93 天前
    @changdy 啥年代了, 还用后台模板引擎
    az467
        20
    az467  
       93 天前
    让升到 java11/17 都不愿意,害搁这里 kotlin 呢。
    Goooler
        21
    Goooler  
       93 天前
    因为懒啊,拒绝新事物,说语法不香的那是没好好用过
    Leviathann
        22
    Leviathann  
       93 天前
    @ciki 21 以后才算没啥优势,21 以下优势还是很明显,java8 的集合连静态工厂都没有,还得用蹩脚的 guava 创建

    @Mateverse kotlin 必须 inlay hint 全开,面向 ide 编程

    @witcherhope 某种特性的易用程度和使用频率强相关,java 一样可以做某种属性的懒加载或者委托,但是我很少使用,kotlin 一个关键字就行所以用的很多,体验完全不一样
    Bingchunmoli
        23
    Bingchunmoli  
       93 天前 via Android
    @changdy 有模板引擎,lambda 还属于新特性,大部分用 1.7 语法比较正常。 啰嗦确实罗嗦但是高级新手一个逻辑写出来差不了太多,不容易知名问题,也没有什么亮点
    kassadin
        24
    kassadin  
       93 天前
    Java 没“官方”啊
    Web 部分 “Java 又不是不能用”,Spring 支持 kotlin 也没强推
    Android 端虽不是强推,但协程、Compose 的引入基本也算强推了,Java 已经沦为“真不能用”了
    Narcissu5
        25
    Narcissu5  
       93 天前
    好多 javaer 还在用`java.util.Date`表示时间,虽然这个类已经废弃得只剩两个方法了。。。

    如果哪天我放弃写 java ,一定是被这帮老古董气得
    wangtian2020
        26
    wangtian2020  
       93 天前
    刚从 github 上下了一个 demo 项目,导入 kotlin-compiler-embeddable android studio 花了 30 分钟
    kkocdko
        27
    kkocdko  
       93 天前   ❤️ 6
    因为培训班不教。
    MoonWalker
        28
    MoonWalker  
       93 天前
    @Narcissu5 这怪不了 javaer 把,毕竟现在 mybatis 和 springmvc 都得对 java8 的 date 类做额外处理才能用啊。
    xuanbg
        29
    xuanbg  
       93 天前   ❤️ 1
    反正就是“又不是不能用”,“省不了多少功夫”,“懒得去折腾”
    zmal
        30
    zmal  
       93 天前
    为啥不用 scala ?语法糖比 kotlin 还多。
    以前我也怒喷过 Java 在语法方面的不思进取,后来看了看 JDK 的更新,模块化、G1 、ZGC ,工程方面的大动作真的不含糊,相比之下语法糖那点真不是啥大事。
    再后来用了用 scala ,语法糖见缝插针,多到吐血,滥用到 IDE 都不知道你的代码对不对。
    个人认为 JDK17 已经是比较完美的状态,该有的差不多都有。
    打败 java 的不会是另一种 jvm 语言。
    ssynhtn
        31
    ssynhtn  
       93 天前 via Android
    kotlin 学习成本不低的
    mosliu
        32
    mosliu  
       93 天前
    java 都 18 了 升下版本吧
    花点钱使用 idea 在加上 coplilot
    现在写代码真的很简单了。
    无所谓 kotlin 代理的那点方便与提升。
    2NUT
        33
    2NUT  
       92 天前
    安卓端多吧
    Cbdy
        34
    Cbdy  
       92 天前
    为什么 Java 开发没有普遍使用 Java9,10,11,12,13,14,15,16,17,18 ?
    janus77
        35
    janus77  
       92 天前
    java 的轮子生态很强,轮子的开发者不支持就没那么好用
    安卓的话有谷歌在强推,新的安卓轮子都是 kt 写的
    imtianx
        36
    imtianx  
       92 天前
    kotlin 写着不要太爽,但是看的人很难受,各种高阶函数的使用,特别是那种无限嵌套的
    Narcissu5
        37
    Narcissu5  
       92 天前
    @MoonWalker 新版本都不用的
    changdy
        38
    changdy  
       92 天前
    @bthulu 啊哈 ? 一提到 模板引擎 就想到了 类似 jsp 的那种吗? 然而实际上 系统对接的时候 模板引擎 挺经常用的

    @Bingchunmoli java 的模板引擎 比这 kotlin 真的不能算数..


    真正的问题 我觉得 @Cbdy 说的很对...高版本的 java 推广都成问题... kotlin 的推广更难..
    dwlovelife
        39
    dwlovelife  
       92 天前
    说真的 Java 的替代者如果换成 groovy 会更好,groovy 支持动态,在设计方面会更灵活,同样 groovy 的语法糖也很强写起来巨简洁,只是国内很少人会
    Roojay
        40
    Roojay  
       92 天前 via Android
    万年的 Java1.8 还指望转 Kotlin 😂
    dcsuibian
        41
    dcsuibian  
       92 天前
    今天从 Java 换到 Kotlin ,明天就从 Kotlin 换到 Zbling ,后天从
    iRiven
        42
    iRiven  
       92 天前   ❤️ 1
    kotlin 写的时候很舒服,阅读的时候很费脑子,不同人有不同风格,同一个人在不同时期都有不同风格,早上有没有喝咖啡,都能通过 kotlin 表现出来。java 虽然死板点,但是阅读的时候,能一眼就知道要做什么。
    dcsuibian
        43
    dcsuibian  
       92 天前   ❤️ 2
    按快了不好意思。
    1 、新语言的语法糖和旧语言的历史包袱,会在新新语言和新语言之间再次出现。
    2 、Java 本身设计比较优秀,并没有什么明显的缺陷。仍然好用。
    3 、即使很像,说到底仍然是另一个语言。换语言成本很大。
    4 、Java 语言本身也在进化。很多人吐槽 Java8 ,但如果你是老板,团队换新语言和旧语言的新版本之前挑一个,你选哪个呢?
    cweijan
        44
    cweijan  
       92 天前
    kotlin 我比较喜欢的就只有 optional, 其他的都是语法糖, 没有特别大的优势, 静态函数还要声明成 object, 太麻烦了
    searene
        45
    searene  
       92 天前
    从公司层面上考虑是正常的,大部分的 Java 开发是不会 Kotlin 的,如果强推的话,很多人不愿意学,招人成本也会高一些,毕竟会 Java 的比会 Kotlin 的多多了。Kotlin 更多的是语法糖,优势不是特别大。

    如果个人项目的话,我觉得 Kotlin 就很合适了
    roundgis
        46
    roundgis  
       92 天前 via Android
    先普及 java11 再說
    echo1937
        47
    echo1937  
       92 天前   ❤️ 1
    @MoonWalker #28 MyBatis 很早就对 JSR-310 提供开箱可用的支持了。
    Since version 3.4.5, MyBatis supports JSR-310 (Date and Time API) by default.
    https://mybatis.org/mybatis-3/configuration.html#typeHandlers

    mybatis-3.4.5
    https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.4.5
    irytu
        48
    irytu  
       92 天前 via iPhone
    @leighton dynamodb 么
    sagaxu
        49
    sagaxu  
       92 天前 via Android
    用了这,是能早下班还是加薪?
    nicegoing
        50
    nicegoing  
       92 天前
    写了一段时间 kotlin ,越写越觉得 Java 虽然啰嗦,也严谨好看,代码一目了然。
    鱼与熊掌不可兼得,要好看,本来 kotlin 几下搞定的,就得啰啰嗦嗦的写好多。
    bk201
        51
    bk201  
       92 天前   ❤️ 1
    都用 java 了,如果不是单人做的项目,为啥要用一个多语法糖的语言,多语法糖意味着写出来的东西可能很难理解。
    micean
        52
    micean  
       92 天前
    @leighton

    我看自己写的 let+map+apply+?:都需要脑子再 parse 一遍
    kingjpa
        53
    kingjpa  
       92 天前
    java 啊?本来就是以稳定不折腾为主,
    我还用 1.8 呢, 这都多少年了
    wupher
        54
    wupher  
       92 天前
    其实挺好用的,独立负责的项目都在使用 Kotlin 了。

    至于公司那帮老古董,他们连 JDK8 都不愿意升级,还提啥 Kotlin 。
    Jooooooooo
        55
    Jooooooooo  
       92 天前
    写法太多读起来也累.
    jackmod
        56
    jackmod  
       92 天前
    新项目还是用 8 ,因为支持到 2030 年。
    leighton
        57
    leighton  
       92 天前 via iPhone
    @irytu #48 不是,这个还是不细🔒了
    msg7086
        58
    msg7086  
       92 天前
    太真实了,最近刚刚升到 Java 8 ,你跟我说 Kotlin ?(狗头
    hingbong
        59
    hingbong  
       92 天前 via Android
    我们部门就差不多都是 kotkin
    lixm
        60
    lixm  
       92 天前
    用 kotlin 5 年了, 目前感觉良好
    fueen
        61
    fueen  
       92 天前
    不是,我就搞不懂最简单的一点,我用 Java 用的好好地为什么要换 kotkin 啊?
    zed1018
        62
    zed1018  
       92 天前
    因为他们学不会
    weiweiwitch
        63
    weiweiwitch  
       92 天前 via Android
    @fueen 会带来开发效率的提升和错误率下降。特别是空指针,我们现在极少出现了。
    dbpe
        64
    dbpe  
       92 天前
    java 都没玩会..指望他们玩 kotlin?算了吧
    muyiluop
        65
    muyiluop  
       92 天前
    哈哈,每隔一段时间出一个类似的贴子,看下这类型帖子会持续多少年
    changhai
        66
    changhai  
       92 天前
    @zmal 因为 build 慢,performance 也不好
    写了好久 scala 的人路过
    changhai
        67
    changhai  
       92 天前
    @zmal 并不是因为语法糖,毕竟觉得太甜可以不吃,也不是非吃不可。
    yazinnnn
        68
    yazinnnn  
       92 天前   ❤️ 1
    为什么觉得 kotlin 比 java 难懂? java 写点 fp 向的代码,一堆 Function BIFunction BiConsumer 难道比 (T)->R, (A,B)->R,(A,B)->Unit 好懂?
    chendy
        69
    chendy  
       92 天前
    成本和风险不抵收益
    安卓有谷歌在推,其他地方并没有
    日常项目,开发人员连 java 特性都摸不明白,哪有胆量换 kt
    neptuno
        70
    neptuno  
       92 天前
    不然为啥叫 java 开发。。。。
    zmal
        71
    zmal  
       92 天前
    @changhai 我的意思是说因为语法糖去攻击 Java 没有必要,虽然这事情我也做过。

    打败 Java 的不会是一个修补版的 Java 。
    changhai
        72
    changhai  
       92 天前
    @zmal 同意,各有各的好处。
    zmal
        73
    zmal  
       92 天前
    还有就是,理论上其他 JVM 语言有的东西 Java 都可以加上去,再不济可以混合编译。
    “加功能”总是很简单,“该不该加”、“要不要加”、“怎样更好的加”背后的东西才是需要思考的。
    Java 再差也不可能搞出高版本不兼容低版本这种事来。这是包袱,也是责任。
    zhazi
        74
    zhazi  
       92 天前
    你的 java 代码到达可以嫌弃这门语言的地步了吗?
    如果你原本的 java 代码都写不好,凭什么让别人相信你换一门语言就能写好。并且为你的想法去买单
    zmal
        75
    zmal  
       92 天前
    还是建议大家多用一用其他语言的,像 op 和楼里一些优越感很强的 kt 程序员,怎么说呢,多少沾点...
    Mateverse
        76
    Mateverse  
    OP
       92 天前
    @zmal 我优越感在哪里
    zmal
        77
    zmal  
       92 天前
    @Mateverse “[op] 和 [楼里一些优越感很强的 kt 程序员]”,没说你优越感。

    这帖子多少有点引战,我上一句也有点过激,不会再回复了。
    TArysiyehua
        78
    TArysiyehua  
       92 天前
    上面说了一大堆,都是说语言的。其他跟语法真关系不大,有多少人真心喜欢 Java 或者 Kotlin 了?再说白一点,有多少人喜欢编程的?
    大部分人能省事就省事,学一个新的东西难道不费精力吗?

    那为啥 Android 很多人用。废话,你不会 kotlin 你找不到工作。我做 Java 后端的,不会 Kotlin 会找不到工作吗?你再问问现在的 android 开发,面试不会 kotlin ,不会协程,有几个能找到工作的?

    那为啥 Android 不会 kotlin 找不着工作呢?根据原因是谷歌一直在推 kotlin ,导致国内不得不学,你不学。团队就不好写 KPI ,有了 KPI ,就导致招人的时候要求会 Kotlin ,招人要求会,从而导致了 Anrdoid 开发者不得不去学
    NoNewWorld
        79
    NoNewWorld  
       92 天前
    因为 java 很多半路出家的,你指望他们用?
    yazinnnn
        80
    yazinnnn  
       92 天前
    呃呃,张嘴多少沾点,嘴里说“多用点其他语言”然后喷别人“优越感很强”,闭嘴引战不再回复,再来就要 block 了吧


    差不多得了 v2 阿 q😣
    Lemeng
        81
    Lemeng  
       92 天前
    循序渐进循序渐进
    Sh4p
        82
    Sh4p  
       92 天前   ❤️ 6
    坐标: Airwallex
    现状: 公司级别使用 Kotlin ,Kotlin 和 Java legacy 比例差不多 95 : 5
    我了解的同情况的公司:Afterpay (公司级别已普及), Lego (公司级别在转型), Google (部分组)

    Kotlin 写后端到底好不好用:
    Springboot 2.3.9, 语言层面只遇到过一个坑:Kotlin 自己的 Collection 是有 Immutable 和 Mutable 两种的,而 Java 都是 Mutable 的,至少这个版本对 Kotlin Immutable Collection 支持有问题。所以在 wire bean 的时候要注意下。
    别的没遇到过任何语言层面的问题,支持得相当完美。

    我理解的阻力:
    1. 面向简历编程。在这个公司不干了,去下一家未必能用 Kotlin 。
    我觉得这个问题无解,尤其在国内。

    2. MVC vs Webflux, JDBC vs R2DBC 。
    这其实跟 Kotlin 够不够好没啥关系。我们组自己的服务已经彻底 reactive 化了,没有这方面烦恼。别的组也不是都用这些,但照样可以用 Kotlin 。

    3. 觉得语法糖用不上,怕编程风格不统一。
    前者的话,我个人觉得都不用说 null safety (毕竟这个东西和 Java 的互兼容性是好是坏是值得讨论的,不是所有 lib 都会给你好好加 @Nullable ),constructor 的优化和 apply 这两个东西已经足够让我忘记 Java 了。

    后者的话,如果你们组 /公司的 CR 流程和风气够好,我觉得互相理解、统一、寻找 better practice 是必经之路,也跟语言没什么关系。
    MoonWalker
        83
    MoonWalker  
       92 天前
    @echo1937 是我云了,哈哈哈
    ZeroDu
        84
    ZeroDu  
       92 天前
    楼上很多人说为啥不设计 java 版本。java 的大多项目都是业务相关,java 项目往往依赖非常多,升级版本带来的问题很多,无法确保三方依赖支持。因为 java 项目众多各个库为能广泛应用自然版本选择时不会那么激进,
    nicocho
        85
    nicocho  
       92 天前
    kotlin 是 google 推荐的 android 开发语言, 协程,语法糖什么的是不错,但作为一个老 java,kotlin 可读性不那么舒服
    nicevar
        86
    nicevar  
       91 天前
    @TArysiyehua 没那么夸张,安卓开发不用 Kotlin 的多的去了,甚至有些保守的公司过去很长一段时间不让用 Kotlin ,一个语言而已,真要用,几天就能上手了。
    Sh4p
        87
    Sh4p  
       91 天前   ❤️ 1
    而且易读性这个东西要怎么定义呢?假设让一个完全没见过 JVM 系语言的人来看

    @ Data
    @ AllArgsConstructor
    @ NoArgsConstructor
    public class RandomStuff {
    private String a = "a";
    private String b = "b";
    }


    class RandomStuff(
    val a: String = "a",
    val b: String = "b",
    )

    1. 应不应该强逼着语言新手理解 annotation ?
    2. 如果不用 lombok ,第一个东西你手写会变多长?
    3. 手写原生 constructor ,RandomStuff(String a),我怎么让这个东西只接受一个参数,但能选择赋值给 a or b ?
    4. 读惯了与好读是等价的吗?
    cheng6563
        88
    cheng6563  
       91 天前
    lombok 现在都用不动,还说 Kotlin ?
    Suddoo
        89
    Suddoo  
       91 天前 via iPhone
    老板不好招人,开公司要考虑成本的,手下一帮人等着养家糊口
    thtznet
        90
    thtznet  
       91 天前
    我是 C#小组派来招安各位的,论语法糖和一把梭,C#从来没有输过....我编不下去了。
    aureole999
        91
    aureole999  
       91 天前 via Android
    用了 2 年 kotlin 最近回头写了一点 java ,觉得 kotlin 的可空 /不可空变量和扩展还是挺好用的。data 类大部分情况下好用,但不能继承有时候又有点麻烦,不想 lombok 比较灵活
    Leviathann
        92
    Leviathann  
       91 天前
    @Sh4p
    java 顶多是关于 how 的可读性,写一堆流水账简简单单,但是在关于 what 的可读性方面远不如 kotlin ,也就是表达能力

    kotlin 影响可读性的地方主要是作用域和 receiver 容易变,这个就要借助 ide 的类型提示了
    BeautifulSoap
        93
    BeautifulSoap  
       91 天前
    看了下公司的手册,我在的公司现在对于新开发的项目,推荐语言和框架早已经是 Go 或 Kotlin 了。这还是个日本公司,挺多公司也并没你们想得那样因循守旧的。
    iseki
        94
    iseki  
       91 天前 via Android
    @yazinnnn 好耶!
    ByteCat
        95
    ByteCat  
       91 天前
    我做 Spring Boot 都是 Kotlin + Gradle 那一套,Spring 对 Kt 支持还是挺好的,写多了完全不想用 Java 了 XDDD
    haya
        96
    haya  
       91 天前
    kotlin 写写 vert 还行
    Bingchunmoli
        97
    Bingchunmoli  
       91 天前 via Android
    @Narcissu5 熟悉好用,框架做了支持,不过我还是推荐换新写法有些老版本还是要用 util 的 date
    Bingchunmoli
        98
    Bingchunmoli  
       91 天前 via Android
    @weiweiwitch 切换技术栈需要成本. 不需要成本就好了
    Mirage09
        99
    Mirage09  
       91 天前 via iPhone
    很多时候不是“为什么不用”而是“又不是不能用”
    Bingchunmoli
        100
    Bingchunmoli  
       91 天前 via Android
    @Sh4p 生成也挺多的,lombok 我也不太会用静态参数的处理
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2360 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:32 · PVG 18:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.