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