9cubed
ブログ | Tailwind | Vite | Python | Node.js | Linux | PowerShell | その他 | 将棋ウォーズ | 歌の練習
< 前の記事

Kotlin - クラス - 無名クラス(object)

次の記事 >

Kotlin - クラス - lateinit

Kotlin

Kotlin - クラス - シングルトン(object)

公開日:2019-11-25
更新日:2019-11-25

1. 概要

object を使うと、簡単にシングルトンのオブジェクトを作成することができます。


2. シングルトン(object)

interface ITest {
    fun test():String
}

object TestData:ITest {
    val a = 100

    override fun test():String {
        return "Test"
    }
}

fun main() {
    println(TestData.a)      // 100
    println(TestData.test()) // Test
}

クラス内のシングルトン(object)のオブジェクトにアクセスする場合は、
インスタンスからではなく、Test.TestData のように、クラスを指定してアクセスします。
class Test {
    object TestData {
        val value = 100
    }

    fun getValue():Int {
        return TestData.value
    }
}

fun main() {
    val o = Test()
    //println(o.TestData.value)  // エラー。インスタンスからはアクセスできない
    println(Test.TestData.value) // 100
    println(o.getValue())        // 100
}


3. companion object

クラス内のシングルトン(object)に companion を付けると、
シングルトンをクラスの一部として直接使用できるようになります。
シングルトンのため、init ブロックは一度しか処理されません。
Kotlin には static メソッド、static 変数がないため、その代わりとして使うことができます。

class Test {
    //companion object TestData { // TestData は省略可能
    companion object {
        var value:Int
        init {
            println("init") // 1度しか実行されない
            value = 100
        }
        fun print() {
            println(value)
        }
    }

    object TestData2 {
        var value:Int = 100
        fun print() = println(value)
    }

    fun printValue1() = println(Test.value)
    fun printValue2() = println(Test.TestData2.value)
}

fun main() {
    Test.print() // 100
    Test.value = 200
    Test.print() // 200

    println("-----")

    Test.TestData2.print() // 100
    Test.TestData2.value = 300
    Test.TestData2.print() // 300

    println("-----")

    val obj = Test()
    obj.printValue1() // 200
    obj.printValue2() // 300
}

実行結果
init
100
200
-----
100
300
-----
200
300

< 前の記事

Kotlin - クラス - 無名クラス(object)

次の記事 >

Kotlin - クラス - lateinit

YouTube X

新着一覧

  • SCSS のインストールVite
  • Tailwind CSS のプロジェクトの作成Tailwind
  • TypeScriptのプロジェクトの作成Vite
  • Flask のインストールと動作確認Python
  • 簡易Webサーバーの作成Python
  • pipeline で文章の生成Python
  • pipeline で文章の要約Python
  • 音声から文字起こしPython
  • Node.js のインストールNode.js
  • .ps1(PowerShellスクリプト)を実行可能にするPowerShell

アーカイブ

  • 2025/12
  • 2025/11
  • 2025/10
  • 2025/09
  • 2025/08

以前のカテゴリー一覧

  • CakePHP3
  • CentOS7
  • HTML・CSS・JavaScript
  • Haskell
  • JavaScript
  • Kotlin
  • Laravel5
  • PHP
  • Python
  • Ruby
  • RubyOnRails5
  • TypeScript
  • Vue.js
  • Webサーバ講座
  • Webプログラミング講座
  • jQuery
  • linux
  • パソコン講座
  • ブログ
  • プログラミング講座
  • メモ帳作成講座
  • 数学

Copyright © 9cubed. All Rights Reserved.

プライバシーポリシー 利用規約
▲