V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nnegier
V2EX  ›  程序员

Java 后端有用 Kotlin 的吗?

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

    Kotlin 目前有个很明显的优点,就是实现了协程(用户态线程),可以减少资源的开销

    50 条回复    2024-04-12 15:03:59 +08:00
    street000
        1
    street000  
       258 天前 via Android
    以前到处用 kotlin ,现在能用 ts 就用 ts ,kotlin 几乎没有什么缺点但是背靠 gradle ,进入前端领域后我是越来越不能接受 gradle 了。
    chendy
        2
    chendy  
       258 天前
    肯定有,但是不多
    90%以上的业务系统不在乎那点性能,而且更在乎换语言之后的风险和成本提高
    macaodoll
        3
    macaodoll  
       258 天前 via Android
    尝试过
    xwwsxp
        4
    xwwsxp  
       258 天前   ❤️ 1
    你这过时了,JDK 21 就实现了所谓的协程,这个有点对于现在的 Java 而言不算什么;不过,万恶的 NPE 处理确实还是痛点,虽然有 Optional 来规避问题。
    Rehtt
        5
    Rehtt  
       258 天前 via Android
    @chendy Kotlin 不是和兼容 java 吗
    Rehtt
        6
    Rehtt  
       258 天前 via Android
    @xwwsxp 大部分还是 JDK8 🤣
    xwwsxp
        7
    xwwsxp  
       258 天前
    @Rehtt 怎么可能,我们早就是 JDK 17 了
    Dragonphy
        8
    Dragonphy  
       258 天前
    可以先试试新增一个 src/main/kotlin 直接写
    zed1018
        9
    zed1018  
       258 天前
    我们。目的是为了 Safe Call 和 val
    liumao
        10
    liumao  
       258 天前
    @xwwsxp #7 确实很多项目还是 jdk8
    weiweiwitch
        11
    weiweiwitch  
       258 天前 via Android
    这语言挺好用的呀。
    我们用了好多年了,上线了好几个后端项目了。没遇到啥语言上的问题。
    这语言对比其他 JVM 语言,变化算少的了。如果不用一些复杂的语法,纯粹可以当做简化版的 Java 用。
    特别是 val 变量声明,用了这个,几乎杜绝了我们项目里所有 NPE 问题。
    协程的话,没有 go 和 C#的好用,但也帮助我们解决了某些特殊需求。
    dlmy
        12
    dlmy  
       258 天前
    @xwwsxp #7 现实就是公司内 90% 的项目还是使用 JDK 8 ,压根就没有办法升级,一定要升级的话,内部自研的中间件就得全部跟着一起升,以此来完成框架适配跟特性兼容,风险跟成本都很大
    layxy
        13
    layxy  
       258 天前
    虽然和 java 兼容,但是协作的时候强制同事学习 Kotlin 不太友好,而且领导也不会同意你随意变更技术栈,个人项目或者小团队协商好倒是可以上
    changhe626
        14
    changhe626  
       258 天前
    我们公司大规模的都是 kotlin+springboot 的模式,很少 java+springboot ,写了这么久的 kotlin ,感觉 kotlin 并没有比 java 好多少。。。。,都是业务语言而已,只是一些非空判断?,优点用,其他的感觉没啥大的区别,语法糖没有那么重要。
    TWorldIsNButThis
        15
    TWorldIsNButThis  
       258 天前 via iPhone
    用 但是没用协程

    用 reactive 的框架才能用上协程,比如 vertx ktor

    spring 底层就写死了 thread per request
    kneo
        16
    kneo  
       258 天前 via Android
    @weiweiwitch 不同意。Kotlin 远比 Java 复杂,和“精简版 Java”八竿子打不着。只能说你用的是简化版的 Kotlin 。
    cbdyzj
        17
    cbdyzj  
       258 天前
    在升级 Java 21 (从 11 升),老代码基本没咋动
    kneo
        18
    kneo  
       258 天前 via Android
    @weiweiwitch 没有 NPE 是因为语言/编译器层面实现的 null safety ,不是因为 val ( immutability )。
    boris1993Jr
        19
    boris1993Jr  
       258 天前 via iPhone

    StubHub 被卖掉之前很多新的后端都是用 Kotlin+SpringBoot+WebFlux 写的

    @street000 #1 并不强绑定 gradle 啊,我们当时就是用 maven 构建
    kneo
        20
    kneo  
       258 天前 via Android
    @xwwsxp java 21 实现的不叫协程( coroutine )。现在好像叫虚拟线程( virtual thread )的比较多。也有别的叫法,但是不能叫做“协程”。协程的“协”一般要求使用者明确定义把当前线程的使用权交给其它协程的时机( suspend )。
    GiftedJarvis
        21
    GiftedJarvis  
       258 天前
    用了四年了, 我感觉 kotlin 的优点是语法糖和 null 安全
    wwalkingg
        22
    wwalkingg  
       258 天前
    我公司 java 都全部转移 kotlin 了。就光是解决了 NPE ,就已经是无敌的理由了
    Huelse
        23
    Huelse  
       258 天前
    Kotlin 和 Scala 都有,主要是解决 NPE 问题,都跑在 JVM 上所以性能无差。
    至于说感受不出区别的,大概是项目太小或者没有深入使用语言特性吧。
    weiweiwitch
        24
    weiweiwitch  
       258 天前
    @kneo 嗯,我记错了。有一段时间没写后端了。
    我们团队里面,各种原因,kotlin 的特性也没有用的很深。只是觉得写起来比较简短和自由。当然,kotlin 的一大缺点就是编译时间太长了。
    NineFold
        25
    NineFold  
       258 天前
    公司项目是用 Java 和 Kotlin 混用写,Kotlin 看起来是比较简洁,但也算不上什么,null safety 的机制确实不错,但 Kotlin 本身在新人学习成本和真正的程序性能考量上感觉帮助不大。
    fkdog
        26
    fkdog  
       258 天前
    kotlin 和 java 的现状就犹如 gradle 和 maven 。
    发展这么多年也说实话估计也就这样的,有优势,但是没有替换必要。
    当然总是付出沉默成本的人不愿接受现实来说 kotlin 的好话。
    Mystery0
        27
    Mystery0  
       258 天前
    kotlin 的协程在后端领域全是 Spring 全家桶的情况下,只要不换 webflux ,协程就一点用处没有,完全用不起来
    我现在自己的小项目用 kotlin+springboot 写的,想用协程也没办法,最后想要执行快还是暴力堆了线程加 Future 来实现
    ByteCat
        28
    ByteCat  
       258 天前
    公司老项目我都改了 Java+Kotlin ,直接把代码生成器改成生成 Kotlin ,新项目直接全 Kotlin ,爽飞了~
    zzzzzzZ
        29
    zzzzzzZ  
       258 天前
    只聊性能纵向不如 GraalVM+JDK17 横向不如 go 整体都不如直接上手搞点架构,做点 infra

    等死吧别指望 Kotlin 了
    Belmode
        30
    Belmode  
       258 天前
    写过玩具,没有上过生产用过
    yooomu
        31
    yooomu  
       258 天前
    在公司的一个小模块尝试过,用来实现 DSL ,感觉还不错
    kenvix
        32
    kenvix  
       258 天前
    @xwwsxp #4 虚拟线程 VT 不是协程,这是两回事
    kenvix
        33
    kenvix  
       258 天前
    kotlin 主要是写的爽,开发效率高,不容易写出错误。

    性能和 Java 是一样的,而且协程的优势快被虚拟线程抹平了,此外协程也没有解决阻塞 IO 的问题,相反虚拟线程是真的解决了 IO 问题的
    cheng6563
        34
    cheng6563  
       258 天前
    @kneo go 的是啥
    dif
        35
    dif  
       258 天前
    JVM 语言,只要一个 JAVA 就够了。学 kotlin 不如去学学 go,rust,ts,python 这些中的若干个。 安卓的可以尝试下 kotlin ,scala 不是写 spark 的没必要学,当然,我猜一定有人用 Play Framework
    unco020511
        36
    unco020511  
       258 天前
    有啊,很多啊.我做安卓和后端全是 kotlin
    lmshl
        37
    lmshl  
       258 天前
    最近一个后端项目:ktor + kotlinx + flow api + coroutine + context receivers + arrow.kt
    JDK 21 开 Generational ZGC 和 Virtual Thread (作为 coroutine 的 blocking dispatcher )
    我算啥成分?
    lmshl
        38
    lmshl  
       258 天前
    我是精通 Scala ,同时也熟悉且写过万把行 Rust ,所以换到 Kotlin 对我来说算是能力上封印了。
    至于论坛里没写过几行 coroutine 的开发来说,对鞋城和虚拟县城的理解不一定强于前端仔( async/await ),现在谈 VT 取代 coroutine 有点言之过早
    Belmode
        39
    Belmode  
       257 天前
    @street000 #1 gradle 有什么问题吗?
    coderpwh
        40
    coderpwh  
       257 天前
    @street000 gradle 咋说也比 node 好吧
    wssy001
        41
    wssy001  
       257 天前
    很少很少 Java 后端 Java 必学 Kotlin 也就 Andorid 用的多
    kneo
        42
    kneo  
       257 天前 via Android
    @cheng6563 go 的叫 goroutine ,和 Java 虚拟线程是一类东西。
    kneo
        43
    kneo  
       257 天前 via Android
    @lmshl 如果没有虚拟线程,也许过几年会有些人陆陆续续接触一点协程。但是有了虚拟线程之后大部分人不可能去尝试协程了。说“取代”不准确,也许应该叫“抑制”。
    luozic
        44
    luozic  
       257 天前
    注意部分库的问题,如果大部分只需要覆盖 curd ,那肯定 kotlin 爽啊。
    street000
        45
    street000  
       257 天前
    @Belmode @coderpwh
    - 太重了。五六年前的笔记本运行巫师 3 还能经常保持 60 帧,gradle 编译大点的项目会把电脑卡成 ppt 。
    - 太慢了。第一次执行任务很慢,同步/编译脚本很慢,下载依赖很慢。
    - 命令行使用几乎没有开发体验。node 有什么命令看一眼 package.json 一目了然; gradle 的任务,只能说还好有 idea 。
    - 太过灵活太过复杂,而且 api 变动得太频繁。特别是 android 相关的,几年时间里,官方模板里的 build.gradle settings.gradle 不知道变了多少次。groovy -> kts ,buildSrc, libs.versions.toml, compile -> api, implementation 这类变动实在是太多了。

    虽然是不同的技术栈,很多问题 jvm 可能要背首锅,但是类比 js 生态中的 bun/vite/npmp 和 node/webpack/npm ,gradle 能做得更好,但是从 4.x 用到 8.x 感觉 gradle 还是同样的 gradle 。
    street000
        46
    street000  
       257 天前
    @boris1993Jr android 出身还从没用过 maven ,请问 maven 相比 gradle 有哪些优势?只知道 maven 有个 xml 配置文件好像更简单直观点,不过现在我个人的 kotlin 项目主要是 kmp 相关的,暂时也用不上 maven 了。
    beneo
        47
    beneo  
       257 天前
    一直都是 kotlin + maven 做后端,效率非常高
    boris1993Jr
        48
    boris1993Jr  
       257 天前 via iPhone   ❤️ 1
    @street000 #46
    我没深入用过 gradle 就不评判了
    maven 给我的感觉跟你一样,就是简洁直观
    再就是历史惯性,后端一直习惯用 maven 就懒得再换
    qviqvi
        49
    qviqvi  
       257 天前
    从 java 上手快,减少空指针,语法比 java 好很多,开发速度比 java 快,有时候自己写一写代码会用。我是老板我会推的
    houshuu
        50
    houshuu  
       256 天前 via iPhone
    我们组已经完成了全部 java 转 kotlin ,其实也花不了多久大部分 idea 都给自动化了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3473 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:46 · PVG 12:46 · LAX 20:46 · JFK 23:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.