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

Java 后端有用 Kotlin 的吗?

  •  
  •   nnegier · 2024-04-11 06:56:26 +08:00 · 5380 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    性能和 Java 是一样的,而且协程的优势快被虚拟线程抹平了,此外协程也没有解决阻塞 IO 的问题,相反虚拟线程是真的解决了 IO 问题的
    cheng6563
        34
    cheng6563  
       2024-04-11 10:56:48 +08:00
    @kneo go 的是啥
    dif
        35
    dif  
       2024-04-11 11:40:56 +08:00
    JVM 语言,只要一个 JAVA 就够了。学 kotlin 不如去学学 go,rust,ts,python 这些中的若干个。 安卓的可以尝试下 kotlin ,scala 不是写 spark 的没必要学,当然,我猜一定有人用 Play Framework
    unco020511
        36
    unco020511  
       2024-04-11 11:44:54 +08:00
    有啊,很多啊.我做安卓和后端全是 kotlin
    lmshl
        37
    lmshl  
       2024-04-11 12:15:36 +08:00
    最近一个后端项目:ktor + kotlinx + flow api + coroutine + context receivers + arrow.kt
    JDK 21 开 Generational ZGC 和 Virtual Thread (作为 coroutine 的 blocking dispatcher )
    我算啥成分?
    lmshl
        38
    lmshl  
       2024-04-11 12:19:02 +08:00
    我是精通 Scala ,同时也熟悉且写过万把行 Rust ,所以换到 Kotlin 对我来说算是能力上封印了。
    至于论坛里没写过几行 coroutine 的开发来说,对鞋城和虚拟县城的理解不一定强于前端仔( async/await ),现在谈 VT 取代 coroutine 有点言之过早
    Belmode
        39
    Belmode  
       2024-04-11 13:11:47 +08:00
    @street000 #1 gradle 有什么问题吗?
    coderpwh
        40
    coderpwh  
       2024-04-11 13:43:28 +08:00
    @street000 gradle 咋说也比 node 好吧
    wssy001
        41
    wssy001  
       2024-04-11 14:35:48 +08:00
    很少很少 Java 后端 Java 必学 Kotlin 也就 Andorid 用的多
    kneo
        42
    kneo  
       2024-04-11 15:02:11 +08:00 via Android
    @cheng6563 go 的叫 goroutine ,和 Java 虚拟线程是一类东西。
    kneo
        43
    kneo  
       2024-04-11 15:09:04 +08:00 via Android
    @lmshl 如果没有虚拟线程,也许过几年会有些人陆陆续续接触一点协程。但是有了虚拟线程之后大部分人不可能去尝试协程了。说“取代”不准确,也许应该叫“抑制”。
    luozic
        44
    luozic  
       2024-04-11 17:42:14 +08:00
    注意部分库的问题,如果大部分只需要覆盖 curd ,那肯定 kotlin 爽啊。
    street000
        45
    street000  
       2024-04-11 18:03:29 +08:00
    @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  
       2024-04-11 18:17:54 +08:00
    @boris1993Jr android 出身还从没用过 maven ,请问 maven 相比 gradle 有哪些优势?只知道 maven 有个 xml 配置文件好像更简单直观点,不过现在我个人的 kotlin 项目主要是 kmp 相关的,暂时也用不上 maven 了。
    beneo
        47
    beneo  
       2024-04-11 18:28:54 +08:00
    一直都是 kotlin + maven 做后端,效率非常高
    boris1993Jr
        48
    boris1993Jr  
       2024-04-11 19:06:20 +08:00 via iPhone   ❤️ 1
    @street000 #46
    我没深入用过 gradle 就不评判了
    maven 给我的感觉跟你一样,就是简洁直观
    再就是历史惯性,后端一直习惯用 maven 就懒得再换
    qviqvi
        49
    qviqvi  
       2024-04-11 19:43:45 +08:00
    从 java 上手快,减少空指针,语法比 java 好很多,开发速度比 java 快,有时候自己写一写代码会用。我是老板我会推的
    houshuu
        50
    houshuu  
       2024-04-12 15:03:59 +08:00 via iPhone
    我们组已经完成了全部 java 转 kotlin ,其实也花不了多久大部分 idea 都给自动化了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5607 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:58 · PVG 09:58 · LAX 18:58 · JFK 21:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.