Kotlin 是什么?
Kotlin是JetBrains开发的针对JVM、Android 和浏览器的静态编程语言。
JetBrains,作为目前广受欢迎的 Java IDE IntelliJ IDEA 的开发商,在 Apache 许可下已经开源其Kotlin 编程语言。JetBrains 作为最智能的 Java IDE 的开发商,对 Java 的了解是毋庸置疑的,在使用 Java 过程中,JetBrains 的工程师们发现了大量的问题,为了更高效的开发以及解决 Java 中的一些问题,JetBrains 开发了致力于替代 Java 的 Kotlin。
为什么使用 Kotlin?
1、简洁——大大减少您需要编写的样板代码量
使用一行代码创建一个包含getter
,setter
并重写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、多用途——支持多中类型的应用程序
多用途语言允许您构建任何类型的应用程序:
Android开发。
没有性能影响。运行时非常小。服务器应用
100%兼容所有JVM框架。JavaScript
在Kotlin中编写代码,并转换为 JavaScrip 在 Node.js 或浏览器中运行。企业
使用Kotlin进行任何类型的企业Java EE开发。网页
无论您是要强制类型的HTML,CSS构建器还是简单的Web开发。其他所有(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目前提供了四种编写方式:
- 命令行编译工具
- 在线编辑 Try Kotlin
- Eclipse
- IntelliJ IDEA
其中 IntelliJ IDEA 提供了对 Kotlin 最新功能的支持,也是 Kotlin 最智能的编辑器。
前景如何?
目前 花瓣、豆瓣 APP 以及 JetBrains 全线编辑器都在使用 Kotlin,国内很多初创公司也都在使用 Kotlin(尤其是用于 Android 开发)大家可以参考下 哪一些大公司在使用 kotlin 开发应用? Kotlin 被业内称之为 Android 的 Swift ,从这个称呼中大家也能感觉到开发者对 Kotlin 的喜爱程度了吧。Spring Framework 5.0 也提供了对 Kotlin 支持可以看出 Kotlin 在服务端以及移动端都有较好的发展。
Kotlin 是什么?相关推荐
- springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...
- 在kotlin companion object中读取Bean,注入Bean对象
在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件. 使用组 ...
- 在kotlin companion object中读取spring boot配置文件,静态类使用@Value注解配置
在kotlin companion object中读取配置文件 静态类使用@Value注解配置 class Config {@Value("\${name}")fun setNam ...
- kotlin中继承父属性使用构造方法
kotlin中继承父属性使用构造方法 1. 定义父类,给它两个属性: abstract class AbstractResponseMessage {private var success = tru ...
- Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常
kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...
- Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...
- kotlin Bean加载失败lateinit property has not been initialized
Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creat ...
- kotlin重写构造方法编译报错:Primary constructor call expected
在kotlin中使用construct关键字定义构造方法,如果类定义时已经有构造方法(类名后带括号),需要添加构造方法时,需要使用以下写法: class User(var name,var age){ ...
最新文章
- 为什么Python是数据科学领域最受欢迎的语言
- C和指针之动态内存分配常见问题和总结
- vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader
- Windows Phone 7 MVVM模式的学习笔记
- 魔方机器人之下位机编程---模拟PWM
- atitit.React 优缺点 相比angular react是最靠谱的web ui组件化方案了
- 8 EDA技术实用教程【组合电路的Verilog的设计】
- oracle 数据库er生成,oracle数据库生成er图
- 输入法辅助工具:自动切换输入法 for Mac
- SpringBoot - 自动装配 源码解析
- [转]考古学家完颜晓炜——人类曾经真…
- 关于Palantir——第二部分:本体(Ontology)
- ubuntu18.04 安装Teamviewer15出现依赖库出错的解决办法
- DirectX和OPenGL 与 UE4、U3D、Webgl(ThreeJS)的关系
- MySQL-Workbench数据库备份
- Djange构建招聘信息爬虫系统
- 编程c语言零基础知识,零基础学习C语言都需要掌握哪些基础知识
- 5G爆发前夜,谷歌微软争相豪赌的云游戏厉害在哪?
- oracle 网络培训,Oracle 中级运维网络培训班
- 20180402-D · US Tuition Costs · ggplot2 geofacet 按地理位置分面的数据可视化 · R 语言数据可视化 案例 源码
热门文章
- Linux-stty
- phpcms常用模板标签用法大全
- pytorch之多GPU使用—— CUDA_VISIBLE_DEVICES=0,1 python main.py
- STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏
- 记一次Eclipse上tomcat启动失败的解决方案
- Java实现CRC16校验算法
- JVM的GC如何判断对象是否死亡?
- web存储详解(cookie、sessionStorage、localStorage、indexedDB)
- C++,创建临时变量传递给参数为常量的函数,lvalue与rvalue的转换。
- 浏览器的扩展程序插件安装的根目录(Edge、Chrome)