📜  Kotlin-扩展

📅  最后修改于: 2020-12-30 07:04:04             🧑  作者: Mango


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

功能扩展

在函数扩展中,Kotlin允许在主类之外定义方法。在下面的示例中,我们将看到如何在功能级别上实现扩展。

class Alien {
   var skills : String = "null"
    
   fun printMySkills() {
      print(skills)
   }        
}
fun main(args: Array) {
   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的静态功能。这可以使用关键字“伴侣对象”来实现。使用这种机制,我们可以在工厂方法内创建类的对象,然后我们可以使用类名的引用来调用该方法。在下面的示例中,我们将创建一个“伴侣对象”。

fun main(args: Array) {
   println("Heyyy!!!"+A.show())
}
class A {
   companion object {
      fun show():String {
         return("You are learning Kotlin from TutorialsPoint.com")
      }
   }
}

上面的代码将在浏览器中产生以下输出。

Heyyy!!! You are learning Kotlin from TutorialsPoint.com

上面的示例在Java中似乎是静态的,但是,我们实时创建一个对象作为该同一类的成员变量。这就是为什么它也包含在扩展属性下并可以替代地称为对象扩展的原因。您基本上是在扩展同一类的对象,以使用某些成员函数。