Android Kotlin 基本語法3

不知道如何測試下列語法可以參考如何使用Android Studio 測試資料?

  1. class多建構式
  2. 內部class用法
  3. interface
  4. enum class 用法
  5. sealed class 用法
  6. open 用法

  • 1. class多建構式
  • class InfoClass(
        private var name: String, 
        private var number: Int = 1
    ) {
    
        fun getInfo() {
            println("name $name, number $number")
        }
    }
    @Test
    fun test2() {
        val test = InfoClass("Apple")
        test.getInfo() //打印 name Apple, number 1
    
        val test2 = InfoClass("John", 30)
        test2.getInfo() //打印 name John, number 30
    }
    

  • 2. 內部class用法
  • class MainClass {
        var data = 10
        fun main() {
            val innerClass = InnerClass()
            data += innerClass.addFun()
            println("data = ${data}")
        }
        inner class InnerClass {
            var data = 1
            fun addFun(): Int {
                return data + 1
            }
        }
    }
    
    val mainClass = MainClass()
    mainClass.main() //打印 data = 12 
    

  • 3. Interface
  • @Test
    fun test() {
        println("execute success")
        callback.success()
    
        println("execute error")
        callback.error()
        /*
        execute success
        success
        execute error
        error
        */
    }
    val callback = object : Callback {
        override fun success() {
            println("success")
        }
    
        override fun error() {
            println("error")
        }
    
    }
    interface Callback {
        fun success()
        fun error()
    }
    

  • 4. enum class 用法
  • @Test
    fun test() {
        var tag = EnumClass.Data1.getTag()
        println(tag)//打印 0 = Data1
        tag = EnumClass.Data2.getTag()
        println(tag)//打印 1 = Data2
        tag = EnumClass.Data3.getTag()
        println(tag)//打印 2 = Data3
    
        var color = Colors.RED
        println("color = $color, color.color ${color.color}")
        //color = RED, color.color 0xFF0000
    
        color = Colors.GREEN
        println("color = $color, color.color ${color.color}")
        //color = GREEN, color.color 0x00FF00
    
        color = Colors.BLUE
        println("color = $color, color.color ${color.color}")
        //color = BLUE, color.color 0x0000FF
    
    }
    enum class EnumClass(private val index: Int) {
        Data1(0),
        Data2(1),
        Data3(2);
        fun getTag(): String {
            return "$index = $name"
        }
    }
    
    enum class Colors(val color: String) {
        RED("0xFF0000"),
        GREEN("0x00FF00"),
        BLUE("0x0000FF")
    }
    
    enum class RGB { RED, GREEN, BLUE }
    
    inline fun <reified T : Enum> printAllValues() {
        print(enumValues().joinToString { it.name })
    }
    
    @Test
    fun test() {
        printAllValues() // 输出 RED, GREEN, BLUE
        //enum都有 name: String與 ordinal: Int
    }
    

  • 5. sealed class 用法
  • //密封類不允許有非-private 構造函數(其構造函數默認為 private)
    sealed class SealedClass {
        data class onFinished(val data: Int): SealedClass()
        object onError: SealedClass()
    }
    
    fun createSealedClass(index: Int): SealedClass {
        when(index) {
            0 -> {
                return SealedClass.onFinished(30)
            }
            else -> {
                return SealedClass.onError
            }
        }
    }
    
    @Test
    fun test() {
        val sealedClass = createSealedClass(0)
        when(sealedClass) {
            SealedClass.onError -> {
    
            }
            //data class 這裡需要使用 is
            is SealedClass.onFinished -> {
                //打印 30
                println("data = ${sealedClass.data}")
            }
        }
    }
    

  • 6. open 用法
  • //open class 才可以給class繼承
    //open fun 才可以繼承方法改寫
    open class BaseClass {
        open fun test1(value: Int) {
            //打印 BaseClass test1 20
            println("BaseClass test1 $value")
        }
        fun test2(value: Int) {
            //打印 BaseClass test2 25
            println("BaseClass test2 $value")
        }
    }
    //使用override繼承
    class TextClass: BaseClass() {
        override fun test1(value: Int) {
            super.test1(value)
            //打印 TextClass test1 30
            println("TextClass test1 ${value+10}")
        }
    }
    @Test
    fun test() {
        val testClass = TextClass()
        testClass.test1(20)
        testClass.test2(25)
    }
    //最後打印
    /*
    BaseClass test1 20
    TextClass test1 30
    BaseClass test2 25
    */
    


    上面皆是版本ext.kotlin_version = “1.5.0″測試的


    更多相關可以參考這裡


    相關文章

    Android Kotlin 基本語法1Android Kotlin 基本語法2
    1. var 可變變數
    2. val 不可變更參數
    3. Array 用法
    4. ArrayList 用法
    5. List的filter、sort、map、forEach
    6. when 用法
    7. fun 函式用法
    8. if 表達式
    9. for 表達式
    10. 擴充函數(自定義函式)
    1. 操作符重載
    2. 資料區間用法
    3. map使用方法
    4. 內部靜態變數
    5. 靜態變數
    6. 當資料如果是?型態宣告
    7. 資料使用!!,強制將Int?轉Int
    8. data class用法
    9. 強制轉型
    10. run、with、apply、also用法
    Android Kotlin 基本語法4Android Kotlin Classes and Objects-1
    1. 為基礎類型新增函式
    2. Abstract技巧使用
    3. throw使用方法
    4. 利用let特性處理資料型態?
    5. 快速初始化Array
    6. 快速將兩個資料交換
    7. 自定義待處理的fun
    8. 幫loop設定標籤
    1. 多個class與執行順序
    2. init與constructor執行優先序
    3. open繼承與禁止繼承
    4. 不同的寫法,影響override能不能改變值
    5. 繼承與當前Class執行順序
    6. 由inner class去找parent的super
    7. 繼承多個class時,選擇指定的Parent
    8. private protected public internal修飾符差異
    Android Kotlin Classes and Objects-2Android Kotlin 委託屬性
    1. 幫List新增swap功能
    2. 擴充外加函式,幫助程式簡化
    3. T,多類型引入
    4. T搭配in、out使用
    5. 1個對象的object用法
    6. 類型別名
    7. 內聯類
    8. 委託
    1. 變數委託
    2. lazy懶加載用法+String.split
    3. 可觀察屬性observable
    4. 委託內建map
    5. 本地委託屬性,此方法可以減少加載
    6. 委託屬性,唯獨與可讀可寫的方法
    7. 將舊方法棄用

    訂閱Codeilin的旅程,若有最新消息會通知。

    廣告

    發表迴響

    在下方填入你的資料或按右方圖示以社群網站登入:

    WordPress.com 標誌

    您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

    Twitter picture

    您的留言將使用 Twitter 帳號。 登出 /  變更 )

    Facebook照片

    您的留言將使用 Facebook 帳號。 登出 /  變更 )

    連結到 %s

    WordPress.com.

    向上 ↑

    %d 位部落客按了讚: