Kotlin のネストされたクラスと内部クラス
Kotlin は、Android アプリケーションやサーバーサイド アプリケーションの開発に使用される最新のプログラミング言語です。Kotlin の興味深い機能の 1 つは、入れ子クラスと内部クラスのサポートです。この記事では、Kotlin のネストされたクラスと内部クラスを詳しく見て、それらを使用してコードの構成と構造を改善する方法を見ていきます。
ネストされたクラス
ネストされたクラスは、別のクラス内で定義されるクラスです。Kotlin では、キーワードを使用して外部クラス内で宣言するだけで、ネストされたクラスを定義できますclass
。以下に例を示します。
class Outer {
class Nested {
fun `sayHello`() {
println("Hello from Nested!")
}
}
}
次の構文を使用して、ネストされたクラスのインスタンスを作成できます。
val nested = Outer.Nested()
nested.`sayHello`() // Output: Hello from Nested!
ネストされたクラスを使用する利点の 1 つは、ネストされたクラスを使用して関連する機能をグループ化できることです。たとえば、データベース テーブルを表すクラスと、そのテーブルに対するクエリを表すネストされたクラスがあるとします。クエリ クラスをテーブル クラス内にネストすると、関連するコードをまとめて保持し、コードをより整理することができます。
内部クラス
内部クラスは、外部クラスのメンバーにアクセスできる入れ子になったクラスです。inner
Kotlin では、キーワードの前にキーワードを使用して内部クラスを定義できますclass
。以下に例を示します。
class Outer {
private val name: String = "Outer"
inner class Inner {
fun `sayHello`() {
println("Hello from $name.Inner!")
}
}
}
次の構文を使用して、内部クラスのインスタンスを作成できます。
val outer = Outer()
val inner = outer.Inner()
inner.`sayHello`() // Output: Hello from Outer.Inner!
内部クラスを使用する利点の 1 つは、外部クラスのメンバーにアクセスできることです。これは、特定の状況で役立つ場合があります。たとえば、項目のリストを表すクラスと、そのリストの反復子を表す内部クラスがあるとします。イテレータを内部クラスにすることで、リスト クラスのメンバー (サイズや要素など) にアクセスできるようになります。
ネストされたクラスと内部クラスの違い
明らかな違いのいくつかは次のとおりです。
- 外部クラスのメンバーへのアクセス:ネストされたクラスは外部クラスのメンバーにアクセスできませんが、内部クラスはアクセスできます。内部クラスには外部クラスのインスタンスへの参照があり、これにより内部クラスはそのプロパティや関数にアクセスできます。
- スコープ:ネストされたクラスのスコープは外側のクラスに制限されますが、内部クラスのスコープは外側のクラスのインスタンスに制限されます。これは、内部クラスがその外部クラス インスタンスのプライベート メンバーにアクセスできることを意味します。
- 初期化:ネストされたクラスのインスタンスは、外部クラスのインスタンスなしで作成できますが、内部クラスのインスタンスは、外部クラスのインスタンスを使用して作成する必要があります。
- 使用法:ネストされたクラスは、関連する機能をグループ化するために通常使用されますが、内部クラスは、ネストされたクラス内から外部クラスのメンバーにアクセスする必要がある場合に使用されます。
- 構文:ネストされたクラスを宣言する構文は、
class
キーワードを使用して外部クラス内でクラスを宣言するだけです。内部クラスを宣言する構文では、キーワードinner
の前にキーワードを使用しますclass
。 - 命名:ネストされたクラスの名前は、外部クラスの名前の後にドットとネストされたクラスの名前が続きます。内部クラスの名前は、外部クラスの名前の後にドットと内部クラスの名前が続いて付けられ、外部クラスのインスタンスに関連付けられます。
結論
ネストされた内部クラスは、コードの整理と構造化に役立つ Kotlin の強力な機能です。関連する機能をグループ化すると、コードがより整理され、保守しやすくなります。また、内部クラスを使用すると、それらのクラスに外部クラスのメンバーへのアクセスを与えることができ、これは特定の状況で役立つ場合があります。それで、次回はあなたが