当前位置: 首页 > 后端技术 > Java

微服务开发系列:为什么选择kotlin

时间:2023-04-02 01:53:45 Java

源码地址微服务开发系列:开篇服务开发系列:服务发现,nacos的一个小补充微服务开发系列:框架中如何选择开源工具微服务开发系列:数据库orm使用微服务开发系列:如何打印好日志微服务开发系列:鉴权微服务开发系列:认识序列化的重要性微服务开发系列:设计统一的http接口内容形式微服务开发系列:使用异常特性将异常纳入框架管理开发服务文档项目中使用的语言是kotlin。开发者可以根据自己的需要使用java语言开发,但是很明显,项目中的各种工具类针对kotlin做了很多修改。如果大量使用java开发,结果可能会比纯java开发慢。至于我为什么坚持使用kotlin进行开发,之前我也发表过一些文章来描述kotlin的好用,但是在使用过程中总会时不时的被kotlin惊艳到。kotlin除了完全兼容java,在架构上也能发挥很多优势。除了下面介绍的地方,下面的介绍也会涉及到。kotlin用极少的代码,通过扩展特性大大简化了java8中stream的一系列操作。比如从list到mapusers.associate{it.nametoit}的转换就省去了很多繁琐的代码。编写代码过程中对变量类型的智能推断,可以帮助你避免反复推断类型,从而迷惑自己。对于传入的匿名函数,可以避免手动创建函数对象。为了”?”空指针的操作,可以大大简化对空变量的判断和处理。等等,如果能完全掌握这样的操作,代码量还能减少好几倍。学过概率的应该明白,达到同样目的的动作越少,自然出现问题的概率就越小。设计利器来减少代码量并不是kotlin的终结。如果一个框架完全由kotlin搭建,用它的特性来督促个体开发者写出更好的业务代码,就太浪费了。Kotlin也可以帮你弥补一些框架设计上的遗憾。异常抛出以框架设计中必不可少的业务异常抛出为例。if(user.id.isNullOrEmpty()){throwSomeException("useridcannotbeempty")}这样的代码不计其数,但是通过简单的扩展特性,可以用新的合理的方式抛出异常。funBoolean.ifSome(message:String?)=throwSomeException(message)user.id.isNullOrEmpty().ifSome("useridcannotbeempty")所以除了特殊情况外,在框架的任何地方都使用这个抛出异常的方法,节省代码,可读性更高。这样,Java目前有一个工具叫Manifold,也可以在一定程度上实现这个方法。更方便的json开发在框架中封装了jackson的使用。在之前的版本中,如果你想将一个java对象转换成jackson对象,你需要像这样:valjson=Jackson.toJavaObject(user)所以在使用扩展之后,创建了一个更有用的转换逻辑。funAny.toObject()=Jackson.convertObject(this)funAny.toArray()=Jackson.convertArray(this)funAny.jsonString()=Jackson.objectToString(this)内联funAny.convert()=Jackson.convert(this,object:TypeReference(){})valuser=User()user.toObject()在以后的使用中,任何对象本身都可以在json和javaObject之间自由转换,这样比较符合以人的思维逻辑。kotlin值得信赖吗?有人怀疑kotlin是否是一种稳定的语言。其实这一点根本不需要考虑。可以发布一个开发语言,这已经说明了一切。你可能会说kotlin在某些极端情况下可能会有意想不到的表现。毕竟koltin是先编译成java的,所以在复杂的情况下,会出现一些问题。对此,我想说没有任何语言可以避免这种情况。对编译器有一定了解的人,可以根据编译器的编译方式,写出一些匪夷所思的编译错误程序。甚至java本身也有一些bug,网上jvm的bug分析大家应该都遇到过。虽然在正常的开发过程中可能会出现这种问题,但是是kotlin的原因吗?显然不是,因为没有一种语言可以避免,甚至一些不合理的地方也不能称为bug,而是features。很多人对jvm本身了解不多,没有理由怀疑kotlin。