美文网首页
kotlin语言特性

kotlin语言特性

作者: 成虫_62d0 | 来源:发表于2022-01-14 16:46 被阅读0次

    原文在 https://github.com/Zhuinden/guide-to-kotlin

    kotlin的空指针安全相关

    ?. ?: !! 操作符

    class MyAdapter: RecyclerView.Adapter<MyAdapter.ViewHolder>() {
        private var items: List<Item>? = null
    
        fun updateItems(items: List<Item>?) {
            this.items = items
            notifyDataSetChanged()
        }
    
        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
            return ViewHolder(LayoutInflater.from(parent!!.getContext()).inflate(R.layout.my_item, parent, false))
        }
    
        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder.bind(items!!.get(position))
        }
    
        override fun getItemCount(): Int {
            return items?.size ?: 0
        }
    }
    

    强制类型转换

    延迟初始化

    private lateinit var realm: Realm

    string

    val hello: String
        get() = "Hello $name, your overlord ${overlord.name} has been expecting you."
    
    val jsonString = """
            {
                "hello": "world",
                "another": {
                        "field": "field",
                        "boom": "boom"
                }
            }
        """.trimIndent()
    

    data class

    data class Dog(
        val name: String,
        val owner: Person
    )
    
    @Parcelize
    data class LoginKey(val placeholder: String = ""): Parcelable
    

    when关键字

    val value = when(number) {
        0,1,2,3,4 -> 1.0
        in 5..9 -> 0.75
        in 10..14 -> 0.5
        in 15..19 -> 0.25
        20 -> 0.2
        else -> 0
    }
    
    enum class Colors {
       RED,
       GREEN,
       BLUE
    }
    
    val color = Colors.RED
    
    when(color) {
        Colors.RED -> {
           ...
        }
        else ->
           ...
        }
    }
    

    控制语句作为表达式(when, return)

    val name = tryGetName() ?: return
    

    有名称的参数,默认参数

    @JvmOverloads
    fun printStrings(first: String = "Hello", second: String = "World") {
        println("$first $second")
    }
    
    printStrings()
    printStrings("Goodbye", "my dear")
    printStrings(first = "Goodbye", second = "my dear")
    printStrings(first = "Goodbye")
    printStrings(second = "my dear")
    

    如果我们使用了 @JvmOverload 那么在java中也起作用

    可变参数和*操作符

    java中的可变参数函数是这样的 void dosomething(String... values)

    在kotlin中有一种语法实现如下:

    fun doSomething(vararg values: String)

    如果我们想把这个数组一个一个的传入其他函数,那么就要使用*操作符

    fun animateTogether(vararg animators: Animator) = AnimatorSet().apply {
        playTogether(*animators)
    }
    

    接口 和默认实现

    泛型

    fun <T: View> findViewById(view: View, @IdRes idRes: Int) = view.findViewById(idRes) as T
    
    val activityType: Class<out Activity> // similar to `? extends T`
        get() = when(this) {
            CAR_HEADER -> CarHeader::class.java
            CAR_VIEW -> CarView::class.java
            DATA_VIEW -> DataView::class.java
        } 
    }
    
    val clazz: Class<*> = SomeClass::class.java
    

    相关文章

      网友评论

          本文标题:kotlin语言特性

          本文链接:https://www.haomeiwen.com/subject/ywgncrtx.html