2

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

 2 years ago
source link: https://www.v2ex.com/t/842611
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  Mateverse · 1 天前 · 7835 次点击

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

第 1 条附言  ·  1 天前

  1. 希望大家友好讨论
  2. 用kotlin不一定代表所有代码都需要切换到kt,我只是个人感觉kt里有很多特性很省事,当然代码易读性确实不如java

第 2 条附言  ·  23 小时 51 分钟前

没有想引战,单纯好奇,遂想讨论一下
105 条回复    2022-03-26 10:30:41 +08:00

zxCoder

zxCoder      1 天前

(又不是不能用

nicevar

nicevar      1 天前

Kotlin 相对 Java ,优势基本上在语法上,Java 有 IDE Buf 加持的情况下,用起来不比 Kotlin 弱,我就是做安卓用 Kotlin ,后端依然用 Java ,没必要折腾,现在我甚至有点后悔把安卓一些封装的库转为 Kotlin 了。

debuggeeker

debuggeeker      1 天前

@nicevar 库还是 java 好,因为有些项目如果不支持 kt ,还能用。特别是老项目,我觉得没有必要纠结用啥。该用就用,前提是都得会。

ciki

ciki      1 天前

Java8 以上很香,kt 没啥优势

witcherhope

witcherhope      1 天前

只是加了些语法糖,而语法糖这个东西够用就好

olaloong

olaloong      1 天前   ❤️ 4

Android 的 Java 不是标准的 Java ,换 Kotlin 确实更好用了
后端有换 Kotlin 的功夫不如提升一下 Java 版本

changdy

changdy      1 天前   ❤️ 1

java 有完备的模板引擎?
lambda 功能真的齐全?
为什么已经实现了 Comparable 还不能用 大于小于符号 ?


不否认 java 生态圈比较齐全...但是 真心感觉 java 写起来啰嗦...

Huelse

Huelse      1 天前   ❤️ 4

激进的已经 scala 一步到位了

yazinnnn

yazinnnn      1 天前

我在用,然后我同事看不懂我写的啥。

再者,大家都是 spring boy ,而 kotlin 对于 spring 来说又没有明显增强的特性。reactor coroutine 算一个吧,但是你见过用 webflux 和 r2dbc 的人吗?

leighton

leighton      1 天前 via iPhone

AWS 某偏核心组,以前大部分是 cpp 和 java ,现在新代码都是 rust 和 kotlin 了。不过 kotlin 语法糖太多,我看别人写的代码有点吃力

haython

haython      1 天前   ❤️ 2

以前试过 kotlin ,然后 3 个人写出 3 个风格,互相难看懂

yazinnnn

yazinnnn      1 天前   ❤️ 1

我工作的常备工具库是 coroutine+vertx+arrowkt ,协程还好说,vertx 和 arrow 这两个 monad 风的库一般人接受不了啊,只能自己写着开心了。

hidemyself

hidemyself      1 天前

因为 Java 有 Spring ,都快一统天下了

Mateverse

Mateverse      1 天前

@yazinnnn spring boy 太真实了哈哈哈哈
@haython 真的,感觉 kotlin 代码没备注读起来是有点…

nothingistrue

nothingistrue      1 天前

虽然都是基于 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

whyrookie      1 天前

Android 用 Kotlin 确实很舒服,毕竟谷歌定下的官方语言,有很多生态上的支持,后端不清楚,Kotlin 的语法比较花哨,确实可能出现不同人写出的代码风格差别很大的情况。我还是很喜欢 Java 的,严谨,风格统一,只是前端(包括客户端)有很多页面,感觉用 Java 写太繁琐了

fredli

fredli      1 天前

因为懒啊,除了 Android ,Java 又不是不能用

bthulu

bthulu      1 天前

@changdy 啥年代了, 还用后台模板引擎

az467

az467      1 天前

让升到 java11/17 都不愿意,害搁这里 kotlin 呢。

Goooler

Goooler      1 天前

因为懒啊,拒绝新事物,说语法不香的那是没好好用过

Leviathann

Leviathann      1 天前

@ciki 21 以后才算没啥优势,21 以下优势还是很明显,java8 的集合连静态工厂都没有,还得用蹩脚的 guava 创建

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

@witcherhope 某种特性的易用程度和使用频率强相关,java 一样可以做某种属性的懒加载或者委托,但是我很少使用,kotlin 一个关键字就行所以用的很多,体验完全不一样

Bingchunmoli

Bingchunmoli      1 天前 via Android

@changdy 有模板引擎,lambda 还属于新特性,大部分用 1.7 语法比较正常。 啰嗦确实罗嗦但是高级新手一个逻辑写出来差不了太多,不容易知名问题,也没有什么亮点

kassadin

kassadin      1 天前

Java 没“官方”啊
Web 部分 “Java 又不是不能用”,Spring 支持 kotlin 也没强推
Android 端虽不是强推,但协程、Compose 的引入基本也算强推了,Java 已经沦为“真不能用”了

Narcissu5

Narcissu5      1 天前

好多 javaer 还在用`java.util.Date`表示时间,虽然这个类已经废弃得只剩两个方法了。。。

如果哪天我放弃写 java ,一定是被这帮老古董气得

wangtian2020

wangtian2020      1 天前

刚从 github 上下了一个 demo 项目,导入 kotlin-compiler-embeddable android studio 花了 30 分钟

kkocdko

kkocdko      1 天前   ❤️ 3

因为培训班不教。

MoonWalker

MoonWalker      1 天前

@Narcissu5 这怪不了 javaer 把,毕竟现在 mybatis 和 springmvc 都得对 java8 的 date 类做额外处理才能用啊。

xuanbg

xuanbg      1 天前   ❤️ 1

反正就是“又不是不能用”,“省不了多少功夫”,“懒得去折腾”

zmal

zmal      1 天前

为啥不用 scala ?语法糖比 kotlin 还多。
以前我也怒喷过 Java 在语法方面的不思进取,后来看了看 JDK 的更新,模块化、G1 、ZGC ,工程方面的大动作真的不含糊,相比之下语法糖那点真不是啥大事。
再后来用了用 scala ,语法糖见缝插针,多到吐血,滥用到 IDE 都不知道你的代码对不对。
个人认为 JDK17 已经是比较完美的状态,该有的差不多都有。
打败 java 的不会是另一种 jvm 语言。

ssynhtn

ssynhtn      1 天前 via Android

kotlin 学习成本不低的

mosliu

mosliu      1 天前

java 都 18 了 升下版本吧
花点钱使用 idea 在加上 coplilot
现在写代码真的很简单了。
无所谓 kotlin 代理的那点方便与提升。

2NUT

2NUT      1 天前

安卓端多吧

Cbdy

Cbdy      1 天前

为什么 Java 开发没有普遍使用 Java9,10,11,12,13,14,15,16,17,18 ?

janus77

janus77      1 天前

java 的轮子生态很强,轮子的开发者不支持就没那么好用
安卓的话有谷歌在强推,新的安卓轮子都是 kt 写的

imtianx

imtianx      1 天前

kotlin 写着不要太爽,但是看的人很难受,各种高阶函数的使用,特别是那种无限嵌套的

changdy

changdy      1 天前

@bthulu 啊哈 ? 一提到 模板引擎 就想到了 类似 jsp 的那种吗? 然而实际上 系统对接的时候 模板引擎 挺经常用的

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


真正的问题 我觉得 @Cbdy 说的很对...高版本的 java 推广都成问题... kotlin 的推广更难..

dwlovelife

dwlovelife      1 天前

说真的 Java 的替代者如果换成 groovy 会更好,groovy 支持动态,在设计方面会更灵活,同样 groovy 的语法糖也很强写起来巨简洁,只是国内很少人会

RoojayRoojay      1 天前 via Android

万年的 Java1.8 还指望转 Kotlin 😂

dcsuibian

dcsuibian      1 天前

今天从 Java 换到 Kotlin ,明天就从 Kotlin 换到 Zbling ,后天从

iRiven

iRiven      1 天前

kotlin 写的时候很舒服,阅读的时候很费脑子,不同人有不同风格,同一个人在不同时期都有不同风格,早上有没有喝咖啡,都能通过 kotlin 表现出来。java 虽然死板点,但是阅读的时候,能一眼就知道要做什么。

dcsuibian

dcsuibian      1 天前   ❤️ 1

按快了不好意思。
1 、新语言的语法糖和旧语言的历史包袱,会在新新语言和新语言之间再次出现。
2 、Java 本身设计比较优秀,并没有什么明显的缺陷。仍然好用。
3 、即使很像,说到底仍然是另一个语言。换语言成本很大。
4 、Java 语言本身也在进化。很多人吐槽 Java8 ,但如果你是老板,团队换新语言和旧语言的新版本之前挑一个,你选哪个呢?

cweijan

cweijan      1 天前

kotlin 我比较喜欢的就只有 optional, 其他的都是语法糖, 没有特别大的优势, 静态函数还要声明成 object, 太麻烦了

searene

searene      1 天前

从公司层面上考虑是正常的,大部分的 Java 开发是不会 Kotlin 的,如果强推的话,很多人不愿意学,招人成本也会高一些,毕竟会 Java 的比会 Kotlin 的多多了。Kotlin 更多的是语法糖,优势不是特别大。

如果个人项目的话,我觉得 Kotlin 就很合适了

roundgis

roundgis      1 天前 via Android

先普及 java11 再說

irytu

irytu      1 天前 via iPhone

@leighton dynamodb 么

sagaxu

sagaxu      1 天前 via Android

用了这,是能早下班还是加薪?

nicegoing

nicegoing      1 天前

写了一段时间 kotlin ,越写越觉得 Java 虽然啰嗦,也严谨好看,代码一目了然。
鱼与熊掌不可兼得,要好看,本来 kotlin 几下搞定的,就得啰啰嗦嗦的写好多。

bk201

bk201      1 天前   ❤️ 1

都用 java 了,如果不是单人做的项目,为啥要用一个多语法糖的语言,多语法糖意味着写出来的东西可能很难理解。

micean

micean      1 天前

@leighton

我看自己写的 let+map+apply+?:都需要脑子再 parse 一遍

kingjpa

kingjpa      1 天前

java 啊?本来就是以稳定不折腾为主,
我还用 1.8 呢, 这都多少年了

wupher

wupher      1 天前

其实挺好用的,独立负责的项目都在使用 Kotlin 了。

至于公司那帮老古董,他们连 JDK8 都不愿意升级,还提啥 Kotlin 。

Jooooooooo

Jooooooooo      1 天前

写法太多读起来也累.

jackmod

jackmod      1 天前

新项目还是用 8 ,因为支持到 2030 年。

leighton

leighton      1 天前 via iPhone

@irytu #48 不是,这个还是不细🔒了

msg7086

msg7086      1 天前

太真实了,最近刚刚升到 Java 8 ,你跟我说 Kotlin ?(狗头

hingbong

hingbong      1 天前 via Android

我们部门就差不多都是 kotkin

lixm

lixm      1 天前

用 kotlin 5 年了, 目前感觉良好

fueen

fueen      1 天前

不是,我就搞不懂最简单的一点,我用 Java 用的好好地为什么要换 kotkin 啊?

zed1018

zed1018      1 天前

因为他们学不会

weiweiwitch

weiweiwitch      1 天前 via Android

@fueen 会带来开发效率的提升和错误率下降。特别是空指针,我们现在极少出现了。

dbpe

dbpe      1 天前

java 都没玩会..指望他们玩 kotlin?算了吧

muyiluop

muyiluop      1 天前

哈哈,每隔一段时间出一个类似的贴子,看下这类型帖子会持续多少年

changhai

changhai      1 天前

@zmal 因为 build 慢,performance 也不好
写了好久 scala 的人路过

changhai

changhai      1 天前

@zmal 并不是因为语法糖,毕竟觉得太甜可以不吃,也不是非吃不可。

yazinnnn

yazinnnn      1 天前   ❤️ 1

为什么觉得 kotlin 比 java 难懂? java 写点 fp 向的代码,一堆 Function BIFunction BiConsumer 难道比 (T)->R, (A,B)->R,(A,B)->Unit 好懂?

chendy

chendy      1 天前

成本和风险不抵收益
安卓有谷歌在推,其他地方并没有
日常项目,开发人员连 java 特性都摸不明白,哪有胆量换 kt

neptuno

neptuno      1 天前

不然为啥叫 java 开发。。。。

zmal

zmal      1 天前

@changhai 我的意思是说因为语法糖去攻击 Java 没有必要,虽然这事情我也做过。

打败 Java 的不会是一个修补版的 Java 。

changhai

changhai      1 天前

@zmal 同意,各有各的好处。

zmal

zmal      1 天前

还有就是,理论上其他 JVM 语言有的东西 Java 都可以加上去,再不济可以混合编译。
“加功能”总是很简单,“该不该加”、“要不要加”、“怎样更好的加”背后的东西才是需要思考的。
Java 再差也不可能搞出高版本不兼容低版本这种事来。这是包袱,也是责任。

zhazi

zhazi      1 天前

你的 java 代码到达可以嫌弃这门语言的地步了吗?
如果你原本的 java 代码都写不好,凭什么让别人相信你换一门语言就能写好。并且为你的想法去买单

zmal

zmal      1 天前

还是建议大家多用一用其他语言的,像 op 和楼里一些优越感很强的 kt 程序员,怎么说呢,多少沾点...

Mateverse

Mateverse      1 天前

@zmal 我优越感在哪里

zmal

zmal      23 小时 54 分钟前

@Mateverse “[op] 和 [楼里一些优越感很强的 kt 程序员]”,没说你优越感。

这帖子多少有点引战,我上一句也有点过激,不会再回复了。

TArysiyehua

TArysiyehua      23 小时 50 分钟前

上面说了一大堆,都是说语言的。其他跟语法真关系不大,有多少人真心喜欢 Java 或者 Kotlin 了?再说白一点,有多少人喜欢编程的?
大部分人能省事就省事,学一个新的东西难道不费精力吗?

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

那为啥 Android 不会 kotlin 找不着工作呢?根据原因是谷歌一直在推 kotlin ,导致国内不得不学,你不学。团队就不好写 KPI ,有了 KPI ,就导致招人的时候要求会 Kotlin ,招人要求会,从而导致了 Anrdoid 开发者不得不去学

zsyubo393

zsyubo393      23 小时 30 分钟前

因为 java 很多半路出家的,你指望他们用?

yazinnnn

yazinnnn      23 小时 10 分钟前

呃呃,张嘴多少沾点,嘴里说“多用点其他语言”然后喷别人“优越感很强”,闭嘴引战不再回复,再来就要 block 了吧


差不多得了 v2 阿 q😣

Lemeng

Lemeng      21 小时 3 分钟前

循序渐进循序渐进

Sh4p

Sh4p      20 小时 26 分钟前   ❤️ 4

坐标: 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

MoonWalker      20 小时 12 分钟前

@echo1937 是我云了,哈哈哈

ZeroDu

ZeroDu      18 小时 28 分钟前

楼上很多人说为啥不设计 java 版本。java 的大多项目都是业务相关,java 项目往往依赖非常多,升级版本带来的问题很多,无法确保三方依赖支持。因为 java 项目众多各个库为能广泛应用自然版本选择时不会那么激进,

nicocho

nicocho      16 小时 13 分钟前

kotlin 是 google 推荐的 android 开发语言, 协程,语法糖什么的是不错,但作为一个老 java,kotlin 可读性不那么舒服

nicevar

nicevar      16 小时 2 分钟前

@TArysiyehua 没那么夸张,安卓开发不用 Kotlin 的多的去了,甚至有些保守的公司过去很长一段时间不让用 Kotlin ,一个语言而已,真要用,几天就能上手了。

Sh4p

Sh4p      15 小时 58 分钟前

而且易读性这个东西要怎么定义呢?假设让一个完全没见过 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

cheng6563      15 小时 54 分钟前

lombok 现在都用不动,还说 Kotlin ?

Suddoo

Suddoo      15 小时 13 分钟前 via iPhone

老板不好招人,开公司要考虑成本的,手下一帮人等着养家糊口

thtznet

thtznet      13 小时 22 分钟前

我是 C#小组派来招安各位的,论语法糖和一把梭,C#从来没有输过....我编不下去了。

aureole999

aureole999      12 小时 48 分钟前 via Android

用了 2 年 kotlin 最近回头写了一点 java ,觉得 kotlin 的可空 /不可空变量和扩展还是挺好用的。data 类大部分情况下好用,但不能继承有时候又有点麻烦,不想 lombok 比较灵活

Leviathann

Leviathann      12 小时 41 分钟前

@Sh4p
java 顶多是关于 how 的可读性,写一堆流水账简简单单,但是在关于 what 的可读性方面远不如 kotlin ,也就是表达能力

kotlin 影响可读性的地方主要是作用域和 receiver 容易变,这个就要借助 ide 的类型提示了

BeautifulSoap

BeautifulSoap      12 小时 14 分钟前

看了下公司的手册,我在的公司现在对于新开发的项目,推荐语言和框架早已经是 Go 或 Kotlin 了。这还是个日本公司,挺多公司也并没你们想得那样因循守旧的。

iseki

iseki      11 小时 55 分钟前 via Android

@yazinnnn 好耶!

ByteCat

ByteCat      10 小时 42 分钟前

我做 Spring Boot 都是 Kotlin + Gradle 那一套,Spring 对 Kt 支持还是挺好的,写多了完全不想用 Java 了 XDDD

haya

haya      9 小时 42 分钟前

kotlin 写写 vert 还行

Bingchunmoli

Bingchunmoli      7 小时 35 分钟前 via Android

@Narcissu5 熟悉好用,框架做了支持,不过我还是推荐换新写法有些老版本还是要用 util 的 date

Bingchunmoli

Bingchunmoli      7 小时 32 分钟前 via Android

@weiweiwitch 切换技术栈需要成本. 不需要成本就好了

Mirage09

Mirage09      7 小时 30 分钟前 via iPhone

很多时候不是“为什么不用”而是“又不是不能用”

Bingchunmoli

Bingchunmoli      7 小时 28 分钟前 via Android

@Sh4p 生成也挺多的,lombok 我也不太会用静态参数的处理

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK