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
}

在上面的例子中,我们在名为“addMySkills()”的“Alien”类中没有任何方法,但是,我们仍然在类之外的其他地方实现了相同的方法,这就是扩展的神奇之处。

上面这段代码将在浏览器中生成以下输出。

JAVA SQL

对象扩展


Kotlin 提供了另一种机制来实现 Java 的静态功能。这可以使用关键字“伴随对象”来实现。使用这种机制,我们可以在工厂方法中创建一个类的对象,然后我们可以使用类名的引用调用该方法。在下面的例子中,我们将创建一个“同伴对象”。

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

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

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

上面的例子在 Java 中看起来像静态的,然而,在实时我们创建一个对象作为同一个类的成员变量。这就是为什么它也包含在扩展属性下并且可以称为对象扩展的原因。你基本上是在扩展同一类的对象以使用某些成员函数。