24データクラスとEnumクラス


24データクラスとEnumクラス


データクラス


最適化されたデータ処理クラス

データクラスの機能

  • 内部自動生成5機能
  • ユーザが直接呼び出す関数ではなく、データクラスのオブジェクトが配列やリストに含まれている場合に自動的にコンテンツを抽出・書き込む機能をサポートする
  • equals():判断内容の同一性
  • hashCode():オブジェクトの内容から一意のコードを生成する
  • toString():含む属性の表示が容易
  • copy():オブジェクトをコピーして、同じ内容の新しいオブジェクトを作成します.パラメータがある場合は、いくつかの属性を変更して作成できます
  • componentX():属性を順番に返します.内部使用component 1()、component 2()関数
  • fun main() {
        val a = General("보영", 212)
    
        println(a == General("보영", 221))
        println(a.hashCode())
        println(a)
    
        val b = Data("루다", 306)
        
        println(b == General("루다", 306))
        println(b.hashCode())
        println(b)
    
        println(b.copy())
        println(b.copy("아린"))
        println(b.copy(id = 618))
    
        val list = listOf(Data("보영", 212),
                        Data("루다", 306),
                        Data("아린", 618))
    
        for ((a, b) in list) {
            println("${a}, {b}")
        }
    }
    
    class General(val name: String, val id: Int)
    
    data class Data(val name: String, val id: Int)

    結果


    Generalクラスで作成したaはequals()またはhashCode、toString()関数の結果を正しく実現できません.dataクラスで作成したbを使用すると、3つの関数が意味のある機能を自動的に実現でき、copy()関数でソースの新しいオブジェクトをコピーすることも容易に作成できます.

    Enumクラス

  • Enum:列挙タイプの意味
  • enum類の対象は定数を常態的に表すときに用いる大文字、技術
  • enumのオブジェクトは固有の属性を持つことができる
  • 普通クラスのように関数を持つことも可能
  • enum class Color (val number: Int) {
        RED(1),
        BLUE(2),
        GREEN(3);
    
        fun isRed() = this == Color.RED
    }
    fun main() {
        var state = State.SING
        println(state)
    
        state = State.SLEEP
        println(state.isSleeping())
    
        state = State.EAT
        println(state.message)
    }
    
    enum class State(val essage: String) {
        SING("노래를 부릅니다"),
        EAT("밥을 먹습니다"),
        SLEEP("잠을 잡니다");
    
        fun isSleeping() = this == State.SLEEP
    }

    参考資料


    ディモのKotlin講座