Java 已老,Kotlin 或将取而代之?存在吗?
近期小编看到这样一篇文章 小编个人觉得Java不会衰落的 你们觉得呢?
把你们的想法在在下面评论席上发表出来 小编会一个一个看的
Java已经成为历史。它无法发展成现代语言,同时保证向后兼容性。但它为我们带来了最好的JVM生态系统,并引导了许多优秀语言的诞生,如Groovy、Scala、Clojure、Kotlin等。
▌欢迎年纪最小的Kotlin!
Kotlin诞生于2011年,但在去年Google宣布Kotlin成为安卓的官方开发语言之后迅速走红。Kotlin从其他JVM语言中借鉴了大量强大的功能。我们来快速浏览一下Kotlin能为Java开发者带来的好处。
- 无需再担心NPE
Java程序员都讨厌运行时出现空指针异常(Null Pointer Exception,简称NPE)。Kotlin提供了最好的支持,从而在编译时避免空引用。默认情况下,所有对象都不能为空,如果想定义可空的类型,就必须使用 ? 操作符。访问可空的对象时,编译器会强行要求使用安全调用操作符 ?.。还可以用Elvis操作符 ?: 来赋默认值。
- 无需提供显式类型声明
Kotlin能够自动推断类型,因此无需显式声明。只需使用val 就可以定义final变量,用var定义普通变量。注意只有声明和赋值出现在同一条语句时才能推断类型。
- 避免复杂的字符串格式化
Kotlin允许使用字符串模板来简化字符串格式化。$可以用来引用变量,复杂的表达式可以用 ${}。
- 创建简单的POJO无需使用样板代码
Kotlin提供了data类,用来定义仅仅用来保存数据的对象。Kotlin会为data类自动生成equals、hashCode、toString、copy、getter和getter(针对用var定义的属性)方法。还可以对data类使用对象解构,将对象属性保存到变量中。
- 可以避免Builder类和冗余的方法重载
Kotlin支持方法的命名参数,因此在大多数情况下无需再创建Builder类。此外,Kotlin还支持默认方法参数,因此无需再为传递默认值而重载方法。
- 静态初始化集合无需再使用guava库
Kotlin提供了简单直接的方法,利用listOf、mapOf、setOf方法在行内初始化集合。Map的初始化还支持直观的key to value语法。它还支持Map的解构,以方便迭代。
- 创建Singleton不再复杂
Kotlin的object声明只需一行代码就能创建Singleton。
- 无需使用不必要的局部变量
在Kotlin中,try、when等结构其实是带有返回值的表达式。例如,可以将try的结果赋给变量,这样就无需再创建局部变量了。类似地,when也可以当做表达式使用。when相当于Java的switch,但要强大得多。
- 可以避免类强制转换的异常
Kotlin提供了is操作符(相当于Java的instanceOf)以检查对象是否为指定的类型。使用is运算符会自动进行类型转换。这样就能避免由于错误的类型转换导致的异常。
- 同一个对象内的调用序列中,无需再重复类型名
Kotlin提供了with结构以方便反复调用同一个对象的方法,这样就无需每次都指明变量名。Java通常采用builder模式和方法链来实现这一点。但在Kotlin中更简单,甚至对于非builder类也一样。
Kotlin还提供了apply这个扩展函数,能够实现相同的功能。
- Delegation或decorator模式无须再使用样板代码
为了使用组合代替继承,我们通常采用delegation或decorator模式,但wrapper类必须重复被代理的类的每个方法。Kotlin中能够通过by操作符来简化delegation模式。它将自动实现必要的方法来调用被代理的类。当然,必要的时候仍然可以重载特定的方法。
- 创建静态函数无需再使用类
Kotlin支持类之外的函数,因此创建静态工具函数无需再创建类。
- 在lambda中修改非final的变量无需再使用hack
Java支持lambda的方式是将其自动替换成匿名类,但这样就无法在lambda中改修非final的变量了。但在Kotlin中你能直接修改lambda中的非final变量。
- 延迟加载不再困难
Kotlin提供了非常简单的方法,只需指定lazy关键字,就可以推迟属性的初始化。
- 不需要完全切换到新语言
Kotlin能与Java无缝结合,因此与旧Java代码的集成十分方便。你可以继续使用第三方Java库和框架。与Scala不同,Kotlin没有自己的集合库,它只是扩展了JDK的集合。因此在Java和Kotlin的集合类型之间转换无需使用胶水代码。
- 代码更紧凑,更易读
Kotlin采用方法名惯例重载了许多操作符,以增加代码的可读性。例如,方法plus用来重载 + 运算符,minus重载 - 运算符,times重载 * 运算符,div 重载 / 运算符,等等。它还支持更多的运算符重载,如%、+=、+-、++、-- 等。
Kotlin使用 .. 运算符定义范围,使代码更紧凑。它还提供了until关键字以去除边界,step操作符以跳过项目。in操作符用来检查范围。还可以通过实现rangeTo和contains方法来重载 .. 和 in 运算符。
- 扩展现有的JDK类很容易
Kotlin可以通过非常简单的方式给现有的类增加扩展函数。这是个很强大的功能,利用它可以轻松扩展语言的核心API。
▌为什么应该使用Kotlin?
可以将生产力提高许多倍:
- 它是静态类型语言,因此编译时就能捕获许多bug;
- 工具支持完善,毕竟是写IDE的公司出品的语言;
- 由JetBrains这个IDE公司创建,他们很关心开发者的生产力;
- 能避免Java开发者的许多日常的烦恼。
可以获得许多最佳实践:
- 所有类都是final;
- 集合是immutable的;
- 通过必须的关键字实现重载,而不是可选的注解;
- 没有必须处理的异常(checked exception);
- 没有原始(Raw)类型;
- 对泛型的支持更简洁。
非JVM的支持:
- Kotlin还可以编译成JavaScript用于前端开发;
- Kotlin还可以在其他原生运行时上执行,因此无需JVM即可运行。
▌开发者应该转换到Kotlin吗?
Kotlin很不错,但还不完美,距离完美的语言还需要一些实践。它背后是JetBrains和Google,因此可以相信它只会越来越好。
如果你是安卓开发者,那么应该立刻使用Kotlin。
如果是Java开发者,那么还应该考虑下其他因素,如团队成员、公司的接受程度等。但即使不能立即使用,也应该看看Kotlin这个现代语言的美。
而且,根据ThoughtWorks的技术报告解读,公司可以在风险可控的项目中尝试使用Kotlin。
喜欢的点点赞,下发评论区看你们的答复哦!
如果对自己未来有想法,想提升自己,你现在在JAVA这条路上挣扎,也想在IT行业拿高薪,可以参加我们免费的公开课试听学习 干货满满的,选择最适合自己的课程学习,技术大牛亲授,课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来。
学习交流一群:468947140;二群:878249276
进群获取往期Java高级架构资料、源码、笔记、视频
Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇
一、SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL; 通过慢查日志获取存在性能问题的SQL; 实时获取存在性能问题的SQL; 1.1.2 慢查日志分析工具 相关配置参数: slow_query_log # 启动停止记录慢查日志,慢查询日志默认是没有开启的可以在配置文件中开启(on)slow_query_log_file # 指定慢查日志的存储路径及文件,日志存储和数据从存储应该分开存储long_query_time # 指定记录慢查询日志SQL执行时间的阀值默认值为10秒通常,对于一个繁忙的系统来说,改为0.001秒(1毫秒)比较合适log_queries_not_using_indexes #是否记录未使用索引的SQL 常用工具:mysqldumpslow和pt-query-digest pt-query-digest --explain h=127.0.0.1,u=root,p=p@ssWord slow-mysql.log 1.1.3 实时获取有性能问题的SQL(推荐) SELECT id,user,host,DB,comma...
- 下一篇
SpringCloud微服务之间的通讯,Feign和RestTemplate概念实例详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/82773555 前言: 在springcloud微服务的实际项目开发中,多个微服务之间不仅是相对独立的,而且也是相对关联的;也就是说,微服务之间需要相互访问,多个微服务之间的接口可能会被互相多次调用,我们称之为微服务之间的通信; 微服务之间的通信方式有很多,一般使用以下两种方法:一种是RestTemplate,另一种是Feign; 概念简介: RestTemplate,是spring中方便使用rest资源的一个对象,交互访问的资源通过URL进行识别和定位,每次调用都使用模板方法的设计模式,模板方法依赖于具体接口的调用,从而实现了资源的交互和调用; 它的交互方法有30多种,大多数都是基于HTTP的方法,比如:delete()、getForEntity()、getForObject()、put()、headForHeaders()等; Feign,一个声明式的伪HTTP客户端,使得编写HTTP客户端更加容易; 它只需要创建一个接口,并...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题