如题, 说是可以完美兼容, 不知道有没有实际用过的大哥.
另外, spring 那一套是否可以完全用 kotlin 开发, 如果有一些依赖只有 java 版本呢?
求解, 感谢
1 werls 2024-03-20 09:05:36 +08:00 kotlin 就是 Java 的另一种写法 可以直接使用 Java 库,最后执行的时候都会被编译为 Java.class 执行,类似 js 和 ts 的关系 |
![]() | 2 chendy 2024-03-20 09:07:14 +08:00 多年前( 2017-18 )尝试过 优点挺多,比如 data ,比如不区分基本类型和包装类型,比如 null safe ,巴拉巴拉 缺点也有,最明显的就是慢,一样的机器一样的 ide ,java 就顺滑很多,kt 就卡卡的(不知道现在咋样了 另外就是一些思路要转变,比如 null safe ,比如不可变集合 总体来说挺好玩的,但是公司项目除非团队水平够不考虑 |
![]() | 3 weijancc 2024-03-20 09:11:31 +08:00 不太行, 以前试过 kotlin, 在开发期间比较占资源, 当时机器一般, 挺卡的. 另外就是不能直接使用 static, 必须写成 object, 挺别扭; 比较爽的是有 optional 操作符?. , 有效避免空指针. |
4 zhanlanhuizhang 2024-03-20 09:14:57 +08:00 完美支持。 |
![]() | 5 Melanthius 2024-03-20 09:15:04 +08:00 ![]() 兼容性没有问题,kotlin 语法糖很香,代码可以写的很飘。但是现在有 AI 补全这种东西,Java 这种死板好读的代码反而成为优势。 |
![]() | 6 iamppz 2024-03-20 09:17:26 +08:00 Kotlin 编译很慢,正在迁移回 Java |
7 zed1018 2024-03-20 09:18:31 +08:00 我们 11 个服务里。只有 3 个 java ,1 个 nodejs 。剩下的全是 kotlin 。 |
![]() | 8 wetalk 2024-03-20 09:20:43 +08:00 什么 kt 、groovy 、scala 之类的,只要还跑在 Jvm 上,最多在某些领域存在一定优势,完美平替 Java 那是不可能的 |
![]() | 9 Akitora 2024-03-20 09:23:06 +08:00 和 spring 的兼容没问题,最实打实的好处大概就是 null-safety 以及 orm 框架比 java 的更好用,其他语法糖倒是个人感觉可有可无,最大的问题就是开发的时候 IDE 确实比 java 卡得多,不知道 k2 compiler 转正之后可否有改善 |
![]() | 11 ychost 2024-03-20 09:26:34 +08:00 我的 Java + Kotlin + Groovy 混编的服务端项目,兼容性没问题开发效率高很多,IDEA 现在也很丝滑了( M2 的 MBP ),需要注意的就是千万别把 Kotlin 当 Java 写,否则很难受 |
![]() | 12 YugenFring OP |
![]() | 13 gongxuanzhang 2024-03-20 09:28:39 +08:00 何谈平替, 简直是高配 除了编译慢没缺点,用了 kotlin 就别用 maven 了,换成 gradle |
![]() | 14 YugenFring OP @wetalk 如何理解呢? 因为说 kotlin 是完美兼容的 |
![]() | 15 qinxi 2024-03-20 09:29:14 +08:00 可以, 我们现在没有 java 代码了, 全部转换到纯 kotlin |
16 qq135449773 2024-03-20 09:30:48 +08:00 Java 消亡是早晚的事情,如果一定要投出来一个 jvm based 的语言能活到未来,我一定只会投 kotlin 。 并且 kotlin 也不止 jvm ,他也有 kotlin native 之类的大杀器,只是现在还不是那么成气候。。 |
![]() | 17 YugenFring OP @ychost mac 上的 ide 用着相对于 win 确实平滑很多, 主要不知道 win 下是什么体验 |
![]() | 18 YugenFring OP @Melanthius crud 还可以, java 毕竟训练数据太多了 |
![]() | 19 YugenFring OP |
![]() | 20 Narcissu5 2024-03-20 09:34:07 +08:00 kotlin 在后端的流行度还是不太够,而且 java 21 之后特别是有了虚拟线程之后 kotlin 的优势不太明显了 |
![]() | 21 YugenFring OP @qq135449773 java 的势头感觉确实在下降, 只是百足之虫, 想要死掉还是需要很久很久的. 不喜欢用 java 主要就是语言确实不够现代, 就没有兴趣, 虽然想干的都能干, 所以一直想试试 kotlin |
![]() | 22 liaopen123 2024-03-20 09:37:38 +08:00 兼容没啥问题,kotlin 写的可太爽了。 |
![]() | 23 YugenFring OP @Narcissu5 确实是事实, 主要换到 jdk21, 对于现在的 jdk8 项目, 感觉也算是重构了. 排除团队技术栈的问题, 新项目如果能用 kotlin, 是否会优先选择 |
24 kneo 2024-03-20 09:39:08 +08:00 via Android ![]() @qq135449773 Java 也在进化,特性越来越多,Kotlin 反而越活越尴尬。 Java 必死 Kotlin 是未来这种话不知道怎么想出来的。哪怕你拆开发也没放在一起这么可笑。 |
25 LPJD 2024-03-20 09:40:07 +08:00 不能。Java 的优势在于生态圈,Ctrl+C -> Ctrl + V 。使用 Java 开发十有八九是考虑了开发成本问题。个人开发随意 |
26 kneo 2024-03-20 09:40:50 +08:00 via Android @YugenFring 非安卓项目不考虑 Kotlin 。放五年前还可以尝试。现在没必要。 |
![]() | 27 YugenFring OP @LPJD 不考虑这些, 主要就是自己写的时候爽点, 如果公司嗯要求 java 也可以切换过去 |
![]() | 28 tinyfry 2024-03-20 09:41:42 +08:00 1. 新人容易滥用 kotlion 的特性。 2. 函数式编程很爽。 3. 项目如果大的话,编译非常慢。 4. 在 debug 的时候一些问题可能调试困难。 5. idea 完美支持。你把 java 复制到 kotlin 中,它都会询问要不要自动帮你转。。 结论,适合技术水平稍微好一些的团队使用,或者安卓团队。我持中性看法。 |
29 xsi640 2024-03-20 09:43:59 +08:00 用 kotlin 可以大幅提高开发效率,只是有一定学习成本,关键怎么选看楼主。 |
30 qq135449773 2024-03-20 09:46:12 +08:00 @kneo #24 啥时候 lombok 死了再跟我讲这种话也不迟。 |
![]() | 31 unco020511 2024-03-20 09:51:49 +08:00 完全可以,不管是 android 还是后台开发,都可以无缝替换 |
32 nicholasxuu 2024-03-20 09:52:25 +08:00 可以,甚至 ide 可以完美直接转换语言。几乎可以理解为繁体和简体中文的区别。 |
33 MoonLin 2024-03-20 09:53:34 +08:00 kotlin 对比 java 有个完全无法替代的作用:只要你能引入 kotlin 技术栈,就可以用新的标准库新的语法糖,至于 jdk 是 6 还是 8 还是 11 都无所谓,反正最后会脱糖,这给一些不能升级 jdk (我非常认同)的老项目维护和老 leader 开新项目还用 java8 一个非常舒适的开发环境。理论上说服 leader 引入 kotlin 要比升级 jdk 容易一些。 |
![]() | 34 cloud107202 2024-03-20 09:56:07 +08:00 前 kotlin 重度用户。近两年综合 Java 目前的发展趋势与方向,我是认为在 Android 开发之外的服务端编程里,完全没有需要使用 kotlin 的场景 |
35 kneo 2024-03-20 09:57:44 +08:00 via Android @qq135449773 啥时候 lombok 死了再说 Java 死不死吧。说不定 lombok 都比 kotlin 活得久。 一个东西的生命力不是由你个人的喜好来决定的。因为你不喜欢 lombok 就说 Java 要完蛋,与其说是评论,不如说是诅咒。 |
![]() | 36 YugenFring OP @xsi640 学习曲线感觉和 swift 应该差不多 |
![]() | 37 YugenFring OP @cloud107202 请问这里说的趋势是 jdk 的新特性这些吗? |
38 geekjoehome 2024-03-20 10:02:31 +08:00 ![]() 以前怎么样不清楚,目前看平替 java 应该完全没问题。 我目前每天都在 Jetbrains Academy 上学习 Kotlin Core 课程,用了 kotlin 后就完全不想再回去写 Java 、Javascript 、Typescript 了。Kotlin 除了 Syntatic Sugar 外还有很多非常不错的现代化设计理念,感觉该语言的设计是集市面上众多语言的优点于一体(设计前应该是考察过了很多语言的),又利用了 jvm 丰富的库和跨平台特性。语法精炼且极富表达力( concise and expressive ) 根据 kotlin 课程的介绍,该语言设计初衷就是为了改进背负有沉重历史包袱的 java 语言,其设计的第一原则就是保证与 java 的互操作性与兼容性。所以楼主担忧的“如果有一些依赖只有 java 版本呢?” 完全不是问题,kotlin 与 java 互操作 100%兼容。 最新的编译器感觉编译速度得到了显著提升,也没有感觉到很卡( 2018 年买的 AMD 2400G 32G 内存)。相反,我感觉 kotlin 写起来十分丝滑和清爽。 可能由于 kotlin 比较新,迭代比较快,目前市面上也没啥好的第三方学习资料。相比我看过的一些书籍,目前看 Jetbrains Academy 的学习课程是我见过的最棒的(应该不会有谁比官方更懂 Kotlin 了吧)!官网的各项文档也做得相当 nice 。 |
39 kneo 2024-03-20 10:03:09 +08:00 via Android @MoonLin 朋友,你说的 kotlin 优点只是基于现状,也许下一次 kotlin 升级就不支持 java 6 了。这都是使用第三方技术的风险。 那些还在使用旧 jdk 的老项目,根据我的经验,他们不能升级的原因是主要不想动旧代码。咱们要是有使用 kotlin 的魄力也不至于还在用 6 。 |
40 shyangs 2024-03-20 10:14:39 +08:00 ![]() @qq135449773 @kneo Kotlin 自己的官方教文件一直出 Java / Java classes. 根本就者已 Java 才 Kotlin. 情 Java 怎可能比 Kotlin 先死. ( 把 Kotlin 第一言的初者被迫去 Java ) 比如 https://kotlinlang.org/docs/arrays.html#primitive-type-arrays 直接出了 Kotlin Primitive-type array 相於 Java 的什列. |
41 russ44 2024-03-20 10:16:50 +08:00 前几天看到站里老哥发的 Kotlin 教程中文译版 /t/1023394 之后学习中 |
![]() | 42 meeop 2024-03-20 10:17:05 +08:00 理论上可以,实际上短期内不行 可以是因为 kotlin 可以直接调 java,可以和 java 可逆变换,所以肯定是能当 java 用的 不行是因为有学习成本,特别是其中的协程需要基础库支持,使用协程就不能直接用 java 的很多涉及多线程库了(几乎所有网络,数据类的库),java 又不是不能用,加上 lombok,mybatin 生成器之类的项目降低 java 开发成本,综合来讲用 kotlin 收益大于成本 |
43 fredweili 2024-03-20 10:18:14 +08:00 kotlin 用 java 库没什么问题,kotlin 的高级语法多 |
44 TONYXUELI 2024-03-20 10:18:29 +08:00 @cloud107202 是的,入手才知道扔无线朱老师都是这个方向 |
![]() | 45 monkeyWie 2024-03-20 10:20:12 +08:00 via Android 可以的,就是编译有点慢 |
46 28Sv0ngQfIE7Yloe 2024-03-20 10:22:11 +08:00 |
![]() | 47 lisongeee 2024-03-20 10:31:22 +08:00 ![]() 说一下看起来和 java 无关的问题,kotlin 团队现在主要工作应该是完善 multiplatform kotlin multiplatform 对我真的非常有用,因为我的一个 Android 项目的某个功能 <https://github.com/gkd-kit/selector> 就是用 kotlin multiplatform 实现的 好处是代码可以直接编译为 Javascript/Wasm ,这样用户在 浏览器/nodejs 就能直接在线使用这个功能 如果是以前,我得手动实现 Javascript 端代码,手动维护一个功能的两套代码实现想想都麻烦 |
![]() | 48 echo1937 2024-03-20 10:31:53 +08:00 总有人说 Java 消亡是早晚的事情,这谁都知道啊,问题是多久,五年、十年、十五年? 三种情况,应对的措施完全不同。 |
49 h3ejkuXr64B1T2Uj 2024-03-20 10:33:05 +08:00 之前在做一个谷歌云盘同步的功能,发现官方都没有提供 kotlin 的包 |
![]() | 50 sun2920989 2024-03-20 10:34:09 +08:00 个人偏见还是认为 kotlin 依旧是谷歌和甲骨文博弈下的特殊产物. 另外 ts 的发展势头看起来也一般了. 基于另一套平台之上的语法糖平台.总是有些局限性. |
51 zed1018 2024-03-20 10:43:52 +08:00 |
52 vlinx 2024-03-20 10:44:05 +08:00 当然,完成可以 |
![]() | 53 pdog18 2024-03-20 10:53:20 +08:00 @weijancc 「必须写成 object 是误传」,可以直接在文件中已 top level 的方式存在,比 static ‘方便’多了 |
![]() | 54 Helsing 2024-03-20 10:55:23 +08:00 via iPhone 可以,开发 Android 比 Java 好用多了 编译速度和之前用 Java 没多大区别了 |
55 kenvix 2024-03-20 10:55:34 +08:00 Kotlin 唯一的缺点就是由于语言自身的复杂性,编译开销比 Java 高很多,但是加配置就行。 除此外没有任何缺点 |
56 xingchenxf 2024-03-20 10:56:23 +08:00 可以。 楼上说的编译器卡之类的问题,我都没遇到过,我猜测差不多的开发机应该都能正常编译。 语法上,基本上是集各家之大成了。 我用过的各种语言:C 、java 、js 、ts 、python 、dart 、lua ,kotlin 应该是最好用的了,体验上只有 ts 和 dart 能和 kotlin 打一打,但也还是不如 kotlin 。 唯一的缺点,就是 kotlin 有时候写起来语法糖太多,有的人写的代码太飘,不太容易看懂。 好在都是基于 jvm ,很容易看到源码,实在不行就编成 class 再反编译成 java ,总是能看懂的。 |
57 lmshl 2024-03-20 10:58:49 +08:00 说实话平替 Java 有点过于低估 Kotlin 了 |
58 yongdaimi 2024-03-20 11:00:00 +08:00 用了一段时间了,感觉如下: 1. 编译慢; 2. 语法糖多,编码确实更容易, 确实解决了 java 上的一些痛点; 3. 源码阅读困难,尤其在滥用语法糖和高级特性的情况下,感觉读起来好痛苦,对团队中水平参差不齐的程序员是个挑战; 小项目或许会用一用,大型项目不考虑 |
59 yule111222 2024-03-20 11:01:54 +08:00 我爱 Kotlin~ 支持 Kotlin~ |
![]() | 60 vanishxiaoma 2024-03-20 11:02:17 +08:00 正在使用 kotlin 开发新的后端项目。使用感受写着比 java 爽太多 |
61 MoonLin 2024-03-20 11:02:35 +08:00 @kneo #39 kotlin 那边有过承诺,只要 Android 还需要支持 java6 ,他们就会继续支持 java6 ,哪怕三五年后不再支持 java6 了,截止这个版本的前一个版本语法和标准库也比 Java21 要新,三五年后我们真的能用得上 java21 吗?所以你说的第三方风险是不存在的。 而且我已经说了,有些 leader 本身偏保守,我今年还见过 java8 的新项目,对于升级 jdk ,会说现有一些依赖没人维护了,整个链路升级成本高等等,但是引入 kotlin 并不会影响到这些,说服的可能性还大一些,或者你认为可能性是反过来的? |
![]() | 62 cvooc 2024-03-20 11:03:44 +08:00 @LPJD kotlin 和 java 是完美平替, 可以互相引用, 你可以在 kt 里直接引入 java 文件, 也可以反过来, 不影响生态使用 |
![]() | 63 weijancc 2024-03-20 11:19:09 +08:00 @pdog18 我看你说的 top level, 直接回退成面向过程了. 我之前就想着用一个工具类蕴含静态工具方法, 方法就只有 object. |
![]() | 64 wupher 2024-03-20 11:38:30 +08:00 1. 可以 2. 可以,实际上 18 年以来,我主持的后端项目全部使用 Kotlin 了。 |
![]() | 65 codehz 2024-03-20 11:48:20 +08:00 不是完美平替,企业的例子我不知道,mc 模组里,fabric 的模组,无法在 mixin 中使用 kotlin (原因是 kotlin 的标准库会有冲突) |
66 Rickkkkkkk 2024-03-20 11:59:46 +08:00 语法糖太多在工作上总是坏的. 一个逻辑只有一种写法是最好的. |
![]() | 67 superchijinpeng 2024-03-20 12:41:06 +08:00 完美支持,现在所有的平台,Flink Spark 任务之类的全是 kt |
68 iseki 2024-03-20 12:47:32 +08:00 via Android Kotlin 现在最大的问题一个是语法和标准库特性不够激进,Java 也在更新迭代,另一个是工具链质量比较差,生成的字节码相对糟糕一点。 不过后者好在有 JVM 的 JIT 加持,除了一些边边角角(比如 vararg 展开)并不会产生多少实际影响。 综合考虑 Java 和 Kotlin 现状,我建议可以将大部分业务代码用 Kotlin 编写,在一些明显用 Kotlin 写起来更繁琐的地方,不要犹豫,直接用 Java 写。 会 Kotlin 的开发者熟悉 Java 几乎是必须的。 |
69 iseki 2024-03-20 12:50:08 +08:00 via Android 不需要在什么地方用 Java 什么地方用 Kotlin 制定繁琐的细则,如果你的团队能够把 Kotlin 用好,成员自己一定清楚该怎么做。 |
70 mysunshinedreams 2024-03-20 13:04:04 +08:00 @YugenFring #12 这个确实,我在小范围内的团队使用过,本子又卡又热,很影响使用体检,而且代码提示大部分时候还一顿一顿的。 |
71 aboutyang 2024-03-20 13:20:28 +08:00 单打独斗用 kotlin 。大点的项目用 java 更有利于团队协作和日常维护,还有更好招人。 |
![]() | 72 xxlsize 2024-03-20 13:26:29 +08:00 QQ 也可以平替微信,甚至作为 IM 更好用,但架不住那么社交对象在微信。 平替当然可以,但是要你的领导、同事配合才行,否则自己单玩嘛 |
73 bringyou 2024-03-20 13:38:59 +08:00 插句题外话,kotlin 下一代 compiler K2 已经可以在 kotlin 1.9.x 里面主动开启了,并且会随着 kotlin2.0 发布而转正 |
![]() | 74 dif 2024-03-20 13:39:55 +08:00 spring 当然可以纯 kotlin 开发了,你看官网就提供了 java 和 kotlin ,我记得以前还用 scala 写过呢。 |
75 bringyou 2024-03-20 13:43:16 +08:00 ![]() @bringyou #73 刚没说完就直接发布了…… 按照 jetbrains 的说法,K2 没有太大的语法变更,主要致力于性能表现上的优化。 在一些测试上甚至可以得到 2 倍的性能提升 &t=233s https://blog.jetbrains.com/kotlin/2023/02/k2-kotlin-2-0/ https://blog.jetbrains.com/kotlin/2021/10/the-road-to-the-k2-compiler/ |
![]() | 76 daileidecaifu 2024-03-20 14:28:39 +08:00 没有平替这一说,我觉得还是习惯问题。 |
![]() |
78 Surechun 2024-03-20 14:37:53 +08:00 没有平替。kotlin 写起来感觉还是缺少了点东西,上次有个新项目本来也打算全用 kotlin 写,后面还是变成了混着用。kotlin 没有的特性用 Java 来补。不过还是会关注 kotlin 。 |
79 sam384sp4 2024-03-20 14:53:19 +08:00 ![]() 对技术和生产力有追求的,比如安卓早用上了。 至于后端的 spring 程序员, 让他们升个 jdk 都跟要了他们的命似的,让他们学一门新语言根本不可能。 |
80 sam384sp4 2024-03-20 14:56:58 +08:00 @daileidecaifu kotlin 语法糖多吗, 和 java 比是多, 但和 ts 、c#、python 比还差一大堆。 |
82 Leviathann 2024-03-20 15:12:46 +08:00 swift 才称得上集市面上众多语言的优点于一体 kotlin 可以理解 go 化的 scala ,这里的 go 是简陋(对大部分人并不是坏事)、随意( ad-hoc)、编译更快的意思 |
84 yazinnnn0 2024-03-20 15:15:55 +08:00 kotlin 除了写 jna wrapper 时体验比写 java 差之外, 其他任意情况基本都是大于等于 java |
![]() | 85 windyboy 2024-03-20 15:16:06 +08:00 好像没有感觉过 kotlin 在 ide 里慢 编译慢的问题也没留意过 我现在能用 kotlin 的地方肯定不会想去用 java java 有一些历史性的问题,尤其是维护别人的旧代码,kotlin 的感觉是自然顺畅,甚至 java 就应该是这样的感觉 如果你总是考虑先 java 再转 kotlin 应该是很别扭的 代码量少,清晰,维护别人的代码简直了,谁用谁知道 |
86 zhouhu 2024-03-20 15:19:02 +08:00 kotlin 能用 arthas 吗,或者在 kotlin 上有替代品吗 |
87 Leviathann 2024-03-20 15:24:20 +08:00 另外现在这点特性就嫌容易 abuse ,期待伴随 Kotlin2.0 一起的 context receiver 给你们带来一些小小的 scala 震撼 |
![]() | 88 lovedebug 2024-03-20 15:53:25 +08:00 这就反复在问 typescript 多久替代 Javascript 目前的答案是:不会 |
![]() | 89 betty00 2024-03-20 16:15:03 +08:00 虽然但是,kotlin 写起来真舒服,less is more |
![]() | 91 me1onsoda 2024-03-20 17:04:19 +08:00 kotlin 能带来什么?只是写的舒服的话,那无所谓了,代码补全已经弥补了。要是 kotlin 能比 Java 编译快、启动快、包小、内存占用小,那意义很大。否则我就再激进一点转 rust |
92 caffeine 2024-03-20 18:30:58 +08:00 @xingchenxf 这么麻烦?直接 AI 问一下就行 |
94 nothingistrue 2024-03-20 19:19:01 +08:00 via Android 讲一个笑话,讨论一个 Google 做的东西,非 10 亿+用户级别的,能不能好好用。 |
![]() | 95 wolfan 2024-03-20 19:28:06 +08:00 TS 代替掉了 JS 嘛,没有。 |
97 superedlimited 2024-03-20 19:35:59 +08:00 via iPhone 上面拿 ts 和 js 类比的,不要搞笑了好吗?不是会写两个字母 t s 就可以乱 fun pee 的 |
99 fkdog 2024-03-20 23:21:12 +08:00 当年 groovy 的评价也跟楼上类似,可替代 java 、写的爽,然后就没有然后了。 kotlin 如果没办法像 python 之于机器学习、科学计算,go 之于高并发、云组件一样成为某个杀手级应用/领域的核心,那感觉也就这样,不温不火。 语言框架迭代不要太频繁,单纯可能不想付出太多沉默、试错成本罢了。 |