Kotlin の学習 - オブジェクトとコンパニオン オブジェクトの使用

オブジェクトの使用

1. シングルトンの実現

Kotlin の学習 - データ クラスとシングルトン クラスの記事では、シングルトン クラスを宣言する場合は、 object キーワードを使用してグローバル シングルトン クラスを定義します。コードは次のとおりです。

object Singleton {
    
    
    fun test(){
    
    
        println("Singleton test!!")
    }
}

fun main() {
    
    
    Singleton.test()
}

クラス内にシングルトンを実装することもできます

class Car {
    
    
    val price: Int = 120

    object Engine {
    
    
        //访问不到price
        //price = 200
        fun run() {
    
    
            println("engine start run")
        }
    }
}

fun main() {
    
    
    Car.Engine.run()
}

クラス内に実装されたシングルトンは、クラス外の変数にアクセスできません。

2. オブジェクト式の実装(匿名内部クラス)

匿名の内部クラスとして、外部クラスのメンバー変数にアクセスできます。また、Java の匿名内部クラスとは異なり、複数のインターフェイスを同時に実装できます。

interface IMedia {
    
    
    fun broadcast()
}

interface IGuid {
    
    
    fun guid()
}

fun main() {
    
    
    var name = "Tom"
    var car = object : Car(), IMedia, IGuid {
    
    
        override fun drive() {
    
    
        	super.drive()
            name = "Lucy"
            println("drive car")
        }

        override fun broadcast() {
    
                
        }

        override fun guid() {
    
    
        }
    }
    
    car.drive()
    println(name)
}
//运行结果
drive car
Lucy

companion object使用

コンパニオン オブジェクトによって定義されたクラスは、コンパニオン オブジェクト とも呼ばれ、companion objecその定義は完全にクラス自体に属するため、companion objectクラスなしでグローバルに定義してはなりません。

と同様にobject、名前を付けることcompanion objectも付けないこともできます。この時点では、デフォルト名は Companion になり、クラス内に存在できるコンパニオン オブジェクトは 1 つだけです。

open class ConfigMap {
    
    
    companion object {
    
    
    	private const val PATH = "F://a.txt"
        fun load() = File(PATH).readBytes()
    }
}

fun main() {
    
    
    ConfigMap.load()
}

Kotlin には静的はありません。コンパニオン オブジェクトを使用して、クラス内の静的変数と関数をカプセル化できます。

Guess you like

Origin blog.csdn.net/kongqwesd12/article/details/131580672