Kotlin学习笔记之 12 对象表达式和对象声明

302 阅读1分钟

首发于公众号: DSGtalk1989

12.对象表达式和对象声明

  • 方法返回匿名对象

    我们也可以直接将object关键字修饰的匿名类赋值给方法,表明这个方法返回的是一个匿名内部类对象。

    同时私有方法返回的匿名对象的属性是可以在本地被访问的,非私有方法返回的匿名对象的属性是不能访问的。

    // 私有函数,所以其返回类型是匿名对象类型
     private fun foo() = object {
         val x: String = "x"
     }
    
     // 公有函数,所以其返回类型是 Any
     fun publicFoo() = object {
         val x: String = "x"
     }
    
     fun bar() {
         val x1 = foo().x        // 没问题
         val x2 = publicFoo().x  // 错误:未能解析的引用“x”
     }
    
  • 对象声明

    object关键字可以直接来声明对象,比如:

    object Site {
          var url:String = ""
          val name: String = "菜鸟教程"
    }
    

    这个对象可以赋值给不同的变量,但是多个变量同时指向的是一个对象,一旦一个变量改动了对象的某个属性,所有的变量都会变。

    object Site {
          var url:String = ""
          val name: String = "菜鸟教程"
      }
      fun main(args: Array<String>) {
          var s1 =  Site
          var s2 = Site
          s1.url = "www.runoob.com"
          println(s1.url)
          println(s2.url)
      }
    

    发现s1s2url都改了。