Kotlin相比Java有什么好处?Kotlin简介

2022-08-12  本文已影响0人  super可乐

什么是Kotlin

打开Kotlin编程语言的官网,里面大大的写着,

A modern programming languagethat makes developers happier.

是一门让程序员写代码时更有幸福感的现代语言

接下来对比Java举一些例子。

简洁

当定义一个网络请求的数据类时

Java

public class JPerson {
    private String name;
    private int age;
    //getter
    //setter
    //hashcode
    //copy
    //equals
    //toString
}

Kotlin

data class KPerson(val name: String,val age: Int)

这里用的是Kotlin 的data class 在class 前面加上data 修饰后,kotlin会自动为我们生成上述Java类注释掉的部分

当我们想从List中筛掉某些我们不想要的元素时

Java

List<Integer> list = new ArrayList<>();  

List<Integer> result = new ArrayList<>();
for (Integer integer : list) {           
    if (integer > 0) {  //只要值>0的                 
        result.add(integer);             
    }                                    
}                                        

System.out.println(result);              

Kotlin

val list: List<Int> = ArrayList()

println(list.filter { it > 0 })

如上代码,都能达到筛选List中 值>0 的元素的效果。

这里的filter是Kotlin提供的一个拓展函数,拓展函数顾名思义就是拓展原来类中没有的函数,当然我们也可以自定义自己的拓展函数。

当我们想写一个单例类时

Java

public class PersonInJava {
    public static String name = "Jayce";
    public static int age = 10;

    private PersonInJava() {
    }
    private static PersonInJava instance;
    static {
        instance = new PersonInJava();
    }
    public static PersonInJava getInstance() {
        return instance;
    }
}

Kotlin

object PersonInKotlin {
    val name: String = "Jayce"
    val age: Int = 10
}

是的,只需要把class换成object就可以了,两者的效果一样。

还有很多很多,就不一一举例了,接下来看看安全。

安全

空安全

var name: String = "Jayce" //name的定义是一个非空的String
name = null //将name赋值为null,IDE会报错,编译不能通过,因为name是非空的String

var name: String? = "Jayce" //String后面接"?"说明是一个可空的String
name.length //直接使用会报错,需要提前判空
//(当然,Kotlin为我们提供了很多语法糖,我们可以很方便的进行判空)

类型转换安全

fun gotoSleep(obj: Any) {
    if (obj is PersonInKotlin) {//判断obj是不是PersonInKotlin
        obj.sleep() // 在if的obj已经被认为是PersonInKotlin类型,所以可以直接调用他的函数,调用前不需要类型转换
    }
}

协程

这里只是简单的举个例子

Kotlin的协程不是传统意义上那个可以提高并发性能的协程序

官方的对其定义是这样的

当我们用Java请求网络数据时,一般是这么写的。

 getPerson(new Callback<Person>() {//这里有一个回调            
     @Override                                  
     public void success(Person person) {       
         runOnUiThread(new Runnable() { //切换线程        
             @Override                          
             public void run() {                 
                 updateUi(person)               
             }                                   
         })                                     
     }                                          

     @Override                                  
     public void failure(Exception e) {         
         ...                                    
     }                                           
 });                                            

Kotlin协程后我们只需要这么写

 CoroutineScope(Dispatchers.Main).launch { //启动一个协程
     val person = withContext(Dispatchers.IO) {//切换IO线程
         getPerson() //请求网络                          
     }                                         
     updateUi(person)//主线程更新UI                           
 }                                             

他们两个都干的同一件事,最明显的区别就是,代码更为简洁了,如果在回调里面套回调的话回更加明显,用Java的传统写法就会造成人们所说的CallBack Hell。

除此之外协程还有如下优点

这里就不继续深入了,有兴趣的同学可以参考其他文章。

Kotlin-first

在Google I/O 2019的时候,谷歌已经宣布Kotlin-first,建议Android开发将Kotlin作为第一开发语言。

为什么呢,总结就是因为Kotlin简洁、安全、兼容Java、还有协程。

至于有没有其他原因,我也不知道。(手动狗头)

Google将为更多的投入到Kotlin中来,比如


好的Kotlin就先介绍到这里,感兴趣的同学就快学起来吧~ 接下来在其他文章会对Kotlin和携程进行详细的介绍。

=

作者:JayceonDu
链接:https://juejin.cn/post/7130198991106637832

上一篇 下一篇

猜你喜欢

热点阅读