kotlin 之美(object)

object 从字面上理解是对象意思,那么就是创建一个对象。不过在 kotlin 中对象是和类分开。所以其实 object 是先创建一个类,然后实例化这个类的一个对象。请起来有点耳熟,一个只有一个实例的类,那不就是单例。是的我们可以通过 object 来实现单例模式。
再次说明一下 object 产生过程

  • 创建类
  • 实例化这个类一个对象
    如果很好地理解 object 产生过程,随后有关 object 使用场景,以及为什么使用 object 就不难理解了。
object BasicTuts{
    val allBasicTut = arrayListOf<Tut>()
    var courseAmount = 0
    fun getCourse():Int{
        for(tut in allBasicTut){
            courseAmount+=tut.courses
        }
        
        return courseAmount
    }

    fun add(tut:Tut){
        allBasicTut.add(tut)
    }
}
    BasicTuts.add(Tut("angularjs",10))
    BasicTuts.add(Tut("reactjs",12))
    println(BasicTuts.getCourse())

object 可以作为一个嵌套类来使用,每种数据类型都有自己的排序的依据,提供一个用于排序的标准Comparator。而且这个表示规则的比较器应该是类级别的。这个时候我们可以考虑在类中通过 object 来实现。

class Tut(val title:String,val courses:Int){
    object TitlComparator : Comparator<Tut>{
        override fun compare(o1: Tut, o2: Tut): Int=  o1.title.compareTo(o2.title)

    }
}
    val tutList = listOf<Tut>(Tut("angular",10),Tut("reactjs",12))
    println(tutList.sortedWith(Tut.TitlComparator))

object 另一个应用场景就是工厂方法,

class User private constructor(val nickname:String){
    companion object {
        fun newSubscribingUser(email:String) = User(email.substringBefore('@'))

        fun newQQUser(accounId:Int) = User(accounId.toString() +"from QQ")
    }
}
fun main() {
    val user1 = User.newQQUser(123)
    val user2 = User.newSubscribingUser("zidea2015@163.com")

    println(user1.nickname)
    println(user2.nickname)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,796评论 1 32
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,038评论 0 4
  • Kotlin的类和接口与Java的类和接口是有一定的区别的。Kotlin的接口是可以包含属性声明。Kotlin默认...
    程自舟阅读 13,512评论 0 11
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,386评论 0 3
  • 1、 在评文的时候,我发现了一个问题,许多同学在写命题记叙文时,侧重写人的和侧重记事的文章在写的时候不知不觉地把它...
    三千墨M阅读 6,298评论 3 12