当前位置:   article > 正文

kotlin相比java的区别和优势_kotlin和java的区别

kotlin和java的区别

一、在Android项目中开发,以前会有java开发,现在官方推荐使用kotlin。那么kotlin相比java到底有那些优势呢?往下看

二、类,方法,变量的区别

1.类定义:

Java中 继承类用关键字extends,实现接口用关键字implements 例如:

public class User extends A implements B , C{ }

构造方法

  1. public User(){}
  2. public User(String name){
  3. this.name = name
  4. }

创建对象 User user = new User()

konlin中 继承类和实现接口都用:例如:

class User : A , B , C{ }

构造方法

  1. class User(){
  2. constructor(name:String) : this()
  3. }
  4. class User(name:String)
  5. class User(val name:String)

创建对象 val user = User()

2.方法定义:

Java中 

  1. public Sting getName(){}
  2. public void setName(Sting name){}

konlin中 

  1. fun getName():String{}
  2. fun setName(name:String){}

3.变量的定义:

java中

  1. private static final String TAG = "tag";
  2. private String name;

konlin中静态变量和静态方法需要在companion object {}中定义。变量中用var修饰代表可变,用val修饰代表不可变。

  1. companion object {
  2. private const val TAG = "tag"
  3. }
  4. private var name:String?=null
  5. private val user: User by lazy { User() }

三、判空的处理

当一个类型后面加?代表变量可以为null。当调用变量时,需要加?或者!! 例如:

定义private var name:String?=null

调用 name?.toString() 表示如果name为null,不会调用toString()方法,直接返回null。

name!!.toString() 表示name强制不会为null。但是当name为nul时,调用会报空指针

name?:"默认值"  表示如果name为null,则返回默认值

四、扩展函数

  1. fun String.toRequestBody(): RequestBody {
  2. val map: HashMap<String, String> = HashMap()
  3. map["ids"] = this
  4. return RequestBody.create(
  5. "application/json; charset=utf-8".toMediaTypeOrNull(),
  6. Gson().toJson(map)
  7. )
  8. }

对String类添加toRequestBody()方法,类似于java中继承String类,然后添加一个toRequestBody()方法。konlin中对字符串,集合添加了很多扩展函数,用起来非常方便。

五、高阶函数

1.方法体的定义和传递。相等于java中的接口,然后接口中有一个方法

  1. private var func: ((Int) -> Unit)? = null
  2. fun setListener(func: ((Int) -> Unit)?){
  3. tihs.func = func
  4. }

2.自带的高级函数

  1. public inline fun <T, R> T.let(block: (T) -> R): R {
  2. contract {
  3. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
  4. }
  5. return block(this)
  6. }
  7. public inline fun <T> T.also(block: (T) -> Unit): T {
  8. contract {
  9. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
  10. }
  11. block(this)
  12. return this
  13. }
  14. public inline fun <T, R> T.run(block: T.() -> R): R {
  15. contract {
  16. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
  17. }
  18. return block()
  19. }
  20. public inline fun <T> T.apply(block: T.() -> Unit): T {
  21. contract {
  22. callsInPlace(block, InvocationKind.EXACTLY_ONCE)
  23. }
  24. block()
  25. return this
  26. }

六、协程

        kotln中协程相当于java中的线程,但是比线程轻量级,而且调用简单,还可以挂起

  1. //常用的CoroutineScope
  2. 1.val job = GlobalScope.launch {
  3. // 协程逻辑
  4. }
  5. 2.val job = lifecycleScope.launch {
  6. // 协程逻辑
  7. }
  8. 3.val job = viewModelScope.launch {
  9. // 协程逻辑
  10. }
  11. 4.val scope = MainScope()
  12. scope.launch(Dispatchers.IO) {
  13. // 处理业务
  14. delay(500)
  15. // 处理业务
  16. }
  17. 5. val scope = CoroutineScope(Dispatchers.Main)
  18. 6.val scope = CoroutineScope(CoroutineName(TAG))

七、其他

1.kotlin中没有三元判断符,但是可以直接用 if else

  1. var name:String?=null
  2. val result = if(name =="哈哈") 1 else 2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/742971
推荐阅读
相关标签
  

闽ICP备14008679号