まずはこのコードを見てください
val song = Song()
song.name = "仰げば尊し"
pirntln(song.name)
-
Song
クラスのインスタンスを生成 -
name
フィールドに値を代入 -
name
フィールドを取得し表示
- 直接的にフィールドを代入&取得しているように見えますよね?
- 実際は setter, getter が呼び出されています
getter, setter は自動的に作成されます
- クラスにフィールドを定義すると getterと setter が内部に生成されます
- フィールドと getter, setter の組み合わせをプロパティと呼びます
class Song {
// nameというプロパティを定義
var name: String = ""
}
val song = Song()
// 内部のsetter経由で値を格納
song.name = "仰げば尊し"
// 内部のgetter経由で値を取得
pirntln(song.name)
プロパティを「書き換え不可」にしたいときは
-
var
をval
にすることで getter のみが生成されるようになります
class Song(id: int) {
val id
var name: String = ""
- コンストラクタで初期化された以降は変更できません
val song = Song(1)
song.id = 2 // コンパイルエラー発生