Kotlinメモ-プロパティ

3380 ワード

定数と変数を定義
クラスで宣言されている属性は、必ず初期化されます。そうでないとコンパイルエラーが発生します。属性にabstractを使って修飾しない限り。
    var name: String = ""
    //abstract var size : Int//         

    var boss = "L"
変数定義:varキーワード
var:=
可変変数の定義なし:valキーワードは一回の変数しか与えられません。
val:=
定数と変数は初期化されていないことができますが、引用前にコンパイラを初期化して自動タイプ判定をサポートしなければなりません。すなわち宣言時にはタイプを指定せずにコンパイラで判断してもいいです。
val a: Int = 1
val b = 1       //            Int


var x = 5        //            Int
x += 1           //      
getterとsetter
属性は下記のように読み書きができます。
        var company=Company()
        company.name
javaと違って、これはgetterとsetterの方法に対する暗黙的な呼び出しであり、デフォルトの実現であり、書き込みは以下の通りであるべきであることを示しています。
    var boss = "L"
        get() = field
        set(value) {
            field=value
        }
アクセス権限
もし私達がある方法を公開したくないなら、prvate修饰符を使って実現できます。
        var name: String = ""
        private set
この場合、外部はこの値を変更できません。getはこのように使えません。getのアクセス権限と属性は同じです。
カスタムgetterとsetter
getterとsetterのデフォルトの実現を知っている以上、私達はカスタマイズして実現することができます。
        var address: String = ""
        get() = if (field.length > 0) "" else "    "
        set(value) {
            field = if (value.length > 0) "" else value
        }
field
上で私達はfieldを使って、Ktlinの中でgetterとsetterは局部変数のを使うことを許さないで、属性に対する呼びかけつまりgetterに対する呼びかけのため、このように再帰を生みやすくて、メモリがあふれ出ることをもたらします。したがって、Kotlinは私たちにfieldを提供してくれました。このfieldを使って属性自体の代わりに操作します。
lateinit
lateinitのキーワードは遅延初期化のためのもので、クラスで宣言した属性は初期化しなければなりません。クラス内でNULL属性を宣言したいなら、必要に応じて初期化する必要があります。