Kotlin-类相关特有知识点-数据类和单例类

1.数据类,在类前面加data关键字即可,省略了{},数据类内部的构造函数自动完成了equals(),hashCode(),toString()方法

data class CellPhone(val brand:String,val price:Double) 
val cell1=CellPone("AA",2)
val cell2=CellPone("AA",2)
println(cell1==cell2)

2.单例类,在类的前面加object即可,object加上一个类名。

object Singleton {
    fun singletonTest(){
        
    }
}

3.静态方法
3.1上面提到的单例类的形式,直接可以类名.方法直接调用
虽然单例类不是真正意义上的静态类,但是单例类内部所有的方法都可以以静态方法的形式调用。
3.2使用companion object包含方法的形式,可以定义“静态方法”

fun main(){
    val util=Util()
    util.doAction1()
    Util.doAction2()
    Util.doAction3()
}

class Util{
    fun doAction1(){
        println("111111111")
    }

    companion object{
        fun doAction2(){
            println("222222222222")
        }

        fun doAction3(){
            println("33333333")
        }
    }
}

以上两种方法只能在Kotlin代码中使用
要想使得该方法能够在java代码中调用,也有以下两种方法
3.3给单例类或者companion object修饰的方法中加注释@JvmStatic

class Util{
    fun doAction1(){
        println("111111111")
    }

    companion object{
        fun doAction2(){
            println("222222222222")
        }
        @JvmStatic
        fun doAction3(){
            println("33333333")
        }
    }
}

3.4直接在Android工程中new一个kotlin文件,.kt结尾的File文件,在里面定义的任意方法都可以,就如同定义main方法一样。在java中调用是File文件名+Kt.方法名

4.密封类
在我们写条件判断的时候,目前只有"Success"和"Failure"两种,以后可能加状态,那么在代码中只能加else,但是里面也没有逻辑。密封类就是为了解决这个问题而设计的。sealed class

sealed class Result
class Success(val msg:String):Result()
class Failure(val error:Exception):Result()

fun getResultMsg(result: Result)=when(result){
    is Success -> result.msg
    is Failure -> result.error.message
}

你可能感兴趣的:(Kotlin-类相关特有知识点-数据类和单例类)