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