Kotlin 扩展

  • 扩展

    在本章中,我们将学习Kotlin的另一个新功能,即“扩展”。使用扩展,我们将能够添加或删除某些方法功能,甚至无需继承或修改它们。扩展名通过统计方式解析。它实际上并没有修改现有的类,但是创建了一个可调用的函数,该函数可以通过点操作来调用。
  • 函数扩展

    在函数扩展中,Kotlin允许在主类之外定义方法。在下面的示例中,我们将看到如何在函数级别上实现扩展。
    
    class Alien {
       var skills : String = "null"
      
       fun printMySkills() {
          print(skills)
       }    
    }
    fun main(args: Array<String>) {
       var  a1 = Alien()
       a1.skills = "JAVA"
       //a1.printMySkills()
      
       var  a2 = Alien()
       a2.skills = "SQL"
       //a2.printMySkills()
      
       var  a3 = Alien()
       a3.skills = a1.addMySkills(a2)
       a3.printMySkills()
    }
    fun Alien.addMySkills(a:Alien):String{
       var a4 = Alien()
       a4.skills = this.skills + " " +a.skills
       return a4.skills
    }
    
    尝试一下
    在上面的示例中,“Alien”类内没有名为“addMySkills()”的方法,但是,我们仍在类外的其他地方实现了相同的方法,这就是扩展的神奇之处。上面的代码将在浏览器中生成以下输出。
    
    JAVA SQL
    
  • 对象扩展

    Kotlin提供了另一种机制来实现Java的静态方法。这可以使用关键字“companion object”来实现。使用这种机制,我们可以在工厂方法内创建类的对象,然后我们可以使用类名的引用来调用该方法。在下面的示例中,我们将创建一个“companion object”。
    
    fun main(args: Array<String>) {
       println("Heyyy!!!"+A.show())
    }
    class A {
       companion object {
          fun show():String {
             return("You are learning Kotlin from jc2182.com")
          }
       }
    }
    
    上面的代码将在浏览器中产生以下输出。
    
    Heyyy!!!You are learning Kotlin from jc2182.com
    
    上面的示例在Java中似乎是静态的,但是,实时地,我们正在创建一个对象作为该同一类的成员变量。这就是为什么它也包含在扩展属性下并可以替代地称为对象扩展的原因。您基本上是在扩展同一类的对象,以使用某些成员函数。