Kotlin是JetBrains开发的针对JVM、Android 和浏览器的静态编程语言。

JetBrains,作为目前广受欢迎的 Java IDE IntelliJ IDEA 的开发商,在 Apache 许可下已经开源其Kotlin 编程语言。JetBrains 作为最智能的 Java IDE 的开发商,对 Java 的了解是毋庸置疑的,在使用 Java 过程中,JetBrains 的工程师们发现了大量的问题,为了更高效的开发以及解决 Java 中的一些问题,JetBrains 开发了致力于替代 Java 的 Kotlin。

为什么使用 Kotlin?

1、简洁——大大减少您需要编写的样板代码量

使用一行代码创建一个包含gettersetter并重写equals()hashCode()toString()copy()等方法的POJO

data class Customer(val name: String, val email: String, val company: String)
  • 1

虽然 Java8 中引入了 lambda 表达式,但是由于类库兼容性等问题,我们的一些老项目还在使用旧版本的 JDK。而 Kotlin 提供了 lambda 表达式支持而只需使用 JDK6 + 版本。下面的代码使用 lambda 表达式过滤List

val positiveNumbers = list.filter {it > 0}
  • 1

极简的单例模式:

object ThisIsASingleton {val companyName: String = "JetBrains"
}
  • 1
  • 2
  • 3

2、安全——避免整个类的错误,如空指针异常

摆脱那些讨厌的 NullPointerExceptions 可能导致十亿美元损失的错误。

var output : String
output = null
  • 1
  • 2

Kotlin可以保护您免受对可空类型的误操作,包括来自Java的类型。

println(output.length())
  • 1

如果你检查一个对象的类型是否是某个类型,编译器会自动转换该对象为您检查的类型。

fun calculateTotal(obj: Any) {//这里的 Any 相当于 Java 中的 Objectif (obj is Invoice) {obj.calculateTotal()}
}
  • 1
  • 2
  • 3
  • 4
  • 5

3、多用途——支持多中类型的应用程序

多用途语言允许您构建任何类型的应用程序:

  1. Android开发。 
    没有性能影响。运行时非常小。

  2. 服务器应用 
    100%兼容所有JVM框架。

  3. JavaScript 
    在Kotlin中编写代码,并转换为 JavaScrip 在 Node.js 或浏览器中运行。

  4. 企业 
    使用Kotlin进行任何类型的企业Java EE开发。

  5. 网页 
    无论您是要强制类型的HTML,CSS构建器还是简单的Web开发。

  6. 其他所有(ios、嵌入式等等) 
    Kotlin/Native 在2017年4月份推出了预览版,并在在官方博客中描述了对 Kotlin/Native 的美好愿景。

    Kotlin/Native 使用LLVM编译器基础架构生成机器代码。在这个预览中,我支持以下目标平台:

    • Mac OS X 10.10及更高版本(x86-64)
    • x86-64 Ubuntu Linux(14.04,16.04及更高版本),其他Linux版本也可以正常工作
    • 苹果iOS(arm64),在MacOS X主机上交叉编译
    • Raspberry Pi,在Linux主机上交叉编译

    博客中提到后期还要加入:

    • iOS应用程序(使用Android重用代码)
    • 嵌入式系统/ IoT(例如,Arduino及其以外)
    • 数据分析与科学计算
    • 服务器端和微服务器(低占用性、可执行,利用协同程序的功能)
    • 游戏开发

4、可互操作——100%兼容 Java 从而可利用已有代码及 JVM 类库

在 Kotlin 代码中随意创建 Java 对象、使用已有 Java 代码

import io.netty.channel.ChannelInboundMessageHandlerAdapter
import io.netty.channel.ChannelHandlerContextpublic class NettyHandler: ChannelInboundMessageHandlerAdapter<Any>() {public override fun messageReceived(p0: ChannelHandlerContext?, p1: Any?) {throw UnsupportedOperationException()}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

或者使用 JVM 上的任何现有库,因为 Kotlin 对 Java 有100%的兼容性,包括SAM支持。

指定 JVM 或 JavaScript。在Kotlin编写代码,并选择你要部署到哪里。

import js.dom.html.*fun onLoad() {window.document.body.innerHTML += "<br/>Hello, Kotlin!"
}
  • 1
  • 2
  • 3
  • 4
  • 5

5、多工具支持——自由选择命令行编译器或一级IDE支持

Kotlin目前提供了四种编写方式:

  1. 命令行编译工具
  2. 在线编辑 Try Kotlin
  3. Eclipse
  4. IntelliJ IDEA

其中 IntelliJ IDEA 提供了对 Kotlin 最新功能的支持,也是 Kotlin 最智能的编辑器。

前景如何?

目前 花瓣、豆瓣 APP 以及 JetBrains 全线编辑器都在使用 Kotlin,国内很多初创公司也都在使用 Kotlin(尤其是用于 Android 开发)大家可以参考下 哪一些大公司在使用 kotlin 开发应用? Kotlin 被业内称之为 Android 的 Swift ,从这个称呼中大家也能感觉到开发者对 Kotlin 的喜爱程度了吧。Spring Framework 5.0 也提供了对 Kotlin 支持可以看出 Kotlin 在服务端以及移动端都有较好的发展。

Kotlin 是什么?相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  3. 在kotlin companion object中读取spring boot配置文件,静态类使用@Value注解配置

    在kotlin companion object中读取配置文件 静态类使用@Value注解配置 class Config {@Value("\${name}")fun setNam ...

  4. kotlin中继承父属性使用构造方法

    kotlin中继承父属性使用构造方法 1. 定义父类,给它两个属性: abstract class AbstractResponseMessage {private var success = tru ...

  5. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  6. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  7. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  8. Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库

    示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...

  9. kotlin Bean加载失败lateinit property has not been initialized

    Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creat ...

  10. kotlin重写构造方法编译报错:Primary constructor call expected

    在kotlin中使用construct关键字定义构造方法,如果类定义时已经有构造方法(类名后带括号),需要添加构造方法时,需要使用以下写法: class User(var name,var age){ ...

最新文章

  1. 为什么Python是数据科学领域最受欢迎的语言
  2. C和指针之动态内存分配常见问题和总结
  3. vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader
  4. Windows Phone 7 MVVM模式的学习笔记
  5. 魔方机器人之下位机编程---模拟PWM
  6. atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了
  7. 8 EDA技术实用教程【组合电路的Verilog的设计】
  8. oracle 数据库er生成,oracle数据库生成er图
  9. 输入法辅助工具:自动切换输入法 for Mac
  10. SpringBoot - 自动装配 源码解析
  11. [转]考古学家完颜晓炜——人类曾经真…
  12. 关于Palantir——第二部分:本体(Ontology)
  13. ubuntu18.04 安装Teamviewer15出现依赖库出错的解决办法
  14. DirectX和OPenGL 与 UE4、U3D、Webgl(ThreeJS)的关系
  15. MySQL-Workbench数据库备份
  16. Djange构建招聘信息爬虫系统
  17. 编程c语言零基础知识,零基础学习C语言都需要掌握哪些基础知识
  18. 5G爆发前夜,谷歌微软争相豪赌的云游戏厉害在哪?
  19. oracle 网络培训,Oracle 中级运维网络培训班
  20. 20180402-D · US Tuition Costs · ggplot2 geofacet 按地理位置分面的数据可视化 · R 语言数据可视化 案例 源码

热门文章

  1. Linux-stty
  2. phpcms常用模板标签用法大全
  3. pytorch之多GPU使用—— CUDA_VISIBLE_DEVICES=0,1 python main.py
  4. STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏
  5. 记一次Eclipse上tomcat启动失败的解决方案
  6. Java实现CRC16校验算法
  7. JVM的GC如何判断对象是否死亡?
  8. web存储详解(cookie、sessionStorage、localStorage、indexedDB)
  9. C++,创建临时变量传递给参数为常量的函数,lvalue与rvalue的转换。
  10. 浏览器的扩展程序插件安装的根目录(Edge、Chrome)