简单上手_Kotlin,让开发更简洁
目录
Kotlin 简介
Kotlin 是一个用于现代多平台应用的静态编程语言 ,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或 iOS)。
Kotlin已正式成为Android官方支持开发语言。
Kotlin的优点
一、简洁
对于Java来说Kotlin的简洁体现在很多方面,最明显的就是在Kotlin语法中直接省略了分号,并且在构造一个类的实例时省略了new关键字
二、安全
在Java和许多编程语言中常常出现访问空的指针,导致空指针异常。Kotlin的安全性主要体现在它对Null-Safety的支持上。能够使代码在编译期间就察觉到NullPointerException,让Java developer能够轻松避免NullPointerException。你可以节约很多调试空指针异常的时间,解决null引发的空指针问题。
三、Kotlin和Java是可以相互调用、无缝衔接的。
我们可以利用任何已有的Java libraries来构建我们的应用,可以使用之前熟悉的Java经验来对Kotlin项目进行编程,达到无缝衔接的过程,如果你有Java经验,那对初学Kotlin来说,那简直如鱼得水。
Kotlin对服务器端开发
Kotlin 非常适合开发服务器端应用程序,可以让你编写简明且表现力强的代码, 同时保持与现有基于 Java 的技术栈的完全兼容性以及平滑的学习曲线:
表现力:Kotlin 的革新式语言功能,例如支持类型安全的构建器和委托属性,有助于构建强大而易于使用的抽象。
可伸缩性:Kotlin 对协程的支持有助于构建服务器端应用程序, 伸缩到适度的硬件要求以应对大量的客户端。
互操作性:Kotlin 与所有基于 Java 的框架完全兼容,可以让你保持熟悉的技术栈,同时获得更现代化语言的优势
。
迁移:Kotlin 支持大型代码库从 Java 到 Kotlin 逐步迁移。你可以开始用 Kotlin 编写新代码,同时系统中较旧部分继续用 Java。
工具:除了很棒的 IDE 支持之外,Kotlin 还为 IntelliJ IDEA Ultimate 的插件提供了框架特定的工具(例如 Spring)。
学习曲线:对于 Java 开发人员,Kotlin 入门很容易。包含在 Kotlin 插件中的自动 Java 到 Kotlin 的转换器有助于迈出第一步。Kotlin 心印 通过一系列互动练习提供了语言主要功能的指南。
Kotlin的数据类型
对于掌握Java基础的大神们来说,入门Kotlin那简直是信手拈来。
Java Type | Kotlin Type |
---|---|
byte | kotlin.Byte |
Short | kotlin.Short |
int | kotlin.Int |
float | kotlin.Float |
long | kotlin.Long |
char | kotlin.Char |
double | kotlin.Double |
boolean | kotlin.Boolean |
注意:如果变量为null,则使用?操作符,编译后自动变为包装类型,如果不能为null,就是基本类型。
例如:
//带操作符?的自动转为包装类型Integer类型
val a:int? =null
val a:int =1
Kotlin访问修饰符
修饰符 | Java | Kotlin |
---|---|---|
public | 所有类可见 | 所有类可见(默认) |
private | 当前类可见 | 当前类可见 |
protected | 当前类、子类、同一包路径下的类可见 | 当前类、子类可见 |
default | 同一包路径下的类可见(默认) | 无 |
internal | 无 | 同一模块中的类可见 |
Kotlin基本语法
打印日志
//Java
System.out.println("你好呀");
//Kotlin
println("你好呀")
定义变量与常量常
//Java
String name = "hello world";
final String name = "hello world";
//Kotlin
var name = "hello world"
val name = "hello world"
空字符串定义
//Java
String name=null
//Kotlin
var name:String?=null
字符串拼接
String hello = "Hello"
String world = "World"
String message = hello + world;
val hello = "Hello"
val world = "World"
val message = "$hello$world"
字符串换行(此功能真的好方便的!在写Mybatis注解sql时,就很清晰明了)
//Java
String text="Hi everyone and welcome to my blog.\n" +
"please advise";
//Kotlin
val text = """
Hi everyone and welcome to my blog.
please advise
"""
如图:
条件判断
//Java
if (num >= 0 && num<= 100) { }
//Kotlin
if (num in 0..100) { }
for循环
//Java
for (int i = 1; i <= 10 ; i++) { }
for (int i = 1; i < 10 ; i++) { }
for (int i = 10; i >= 0 ; i--) { }
//Kotlin
for (i in 1..10) { }
for (i in 1 until 10) { }
for (i in 10 downTo 0) { }
集合操作
//Java
final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);
final Map<Integer, String> animal = new HashMap<Integer, String>();
map.put(1, "dog");
map.put(2, "cat");
map.put(3, "pig");
// Java 9
final List<Integer> listOfNumbers = List.of(1, 2, 3, 4);
final Map<Integer, String> animal = Map.of(1, "dog",
2, "cat",
3, "pig");
//Kotlin
val listOfNumber = listOf(1, 2, 3, 4)
val animal= mapOf(1, "dog",
2, "cat",
3, "pig")
方法的定义
//Java
public void method(){
System.out.println("This is Method");
}
//Kotlin
fun method() {
println("This is Method")
}
//有返回值Java
public int method(){
return 1;
}
//有返回值Kotlin
fun method():Int {
return 1
}
Get Set构造器
//Java
public class User{
private String name;
private int age;
public Developer(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//Kotlin
class User(var name: String, var age: Int)
**
Kotlin应用之—— Spring Boot 创建 Restful Web 服务
**
本教程将引导完成使用 Spring Boot 创建简单的 REST 控制器的过程
1、定义项目与依赖项
buildscript {
ext.kotlin_version = '1.4.20' // Kotlin 集成所需
ext.spring_boot_version = '2.1.0.RELEASE'
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // Kotlin 集成所需
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" // 参见 https://www.kotlincn.net/docs/reference/compiler-plugins.html#spring-support
classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE"
}
}
apply plugin: 'kotlin' // Kotlin 集成所需
apply plugin: "kotlin-spring" // https://www.kotlincn.net/docs/reference/compiler-plugins.html#spring-support
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
jar {
baseName = 'gs-rest-service'
version = '0.1.0'
}
repositories {
jcenter()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // Kotlin 集成所需
compile "org.springframework.boot:spring-boot-starter-web"
testCompile('org.springframework.boot:spring-boot-starter-test')
}
2、创建 Greeting 数据类与控制器
下一步是创建具有两个属性(id 与 content)的 Greeting 数据类
data class Greeting(val id: Long, val content: String)
现在,定义 GreetingController ,以 /greeting?name={value} 的形式接受请求, 并返回表示 Greeting 实例的 JSON 对象。
@RestController
class GreetingController {
val counter = AtomicLong()
@GetMapping("/greeting")
fun greeting(@RequestParam(value = "name", defaultValue = "World") name: String) =
Greeting(counter.incrementAndGet(), "Hello, $name")
}
可以看出,这几乎是 Java 到 Kotlin 的一对一转换,对 Kotlin 没有任何特殊要求。
创建 Application 类
最后,需要定义一个 Application 类。使用 Kotlin 来定义一个 Spring Boot 所需的公共静态 main 方法。 可以使用 @JvmStatic 注解与一个伴生对象来完成,但在这里更推荐使用 Application 类外部定义的顶级函数,因为这可以使代码更简洁明了。
无需将 Application 类标记为 open,因为 Gradle 插件 kotlin-spring 会自动完成。
@SpringBootApplication
class Application
fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
运行应用程序
现在可以使用一个 Gradle 标准任务来运行 Spring Boot 应用:
./gradlew bootRun
当应用完成编译,资源捆绑并启动,就可以通过浏览器访问了(默认端口为 8080)
Running App