Kotlin-拡張機能

この章では、「Extension」という名前のKotlinのもう1つの新機能について学習します。拡張機能を使用すると、メソッドの機能を継承または変更しなくても、一部のメソッド機能を追加または削除できます。拡張機能は統計的に解決されます。実際には既存のクラスを変更しませんが、ドット操作で呼び出すことができる呼び出し可能な関数を作成します。

機能拡張

関数拡張では、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 TutorialsPoint.com")
      }
   }
}

上記のコードは、ブラウザに次の出力を生成します。

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

上記の例はJavaでは静的に見えますが、リアルタイムでは、同じクラスのメンバー変数としてオブジェクトを作成しています。これが、拡張プロパティにも含まれ、オブジェクト拡張と呼ばれることもある理由です。基本的に、同じクラスのオブジェクトを拡張して、いくつかのメンバー関数を使用します。