Kotlinのプロパティとフィールド

JavaのBeanではprivate属性でフィールドを定義して、setter、getterを介したプロパティアクセスを行っていました。Kotlinでは少し違うようです。
まず、クラスは下のように定義します。

public class Cutomer {
  public var id: String = ""
  public var name: String = ""
  public var mail: String = ""
}

varキーワードは ミュータブル(可変) の意味で
valキーワードを使うと イミュータブル(読み取り専用) になります。

下は実際にCustomerクラスを使ってみたイメージです。

	var c1 = Cutomer()
	c1.id = "001"//setter setId
	c1.name = "tanaka"// setter setName

	println(c1.id)//getter getId()
	println(c1.name)//getter getName()
001
tanaka

Javaでいうと直接フィールドアクセスしているように見えますがsetter、getterが隠蔽されているイメージです。

ではアクセサをカスタマイズしたいときはどうするかというと
下記のように記述します。

public class Cutomer {
  public var name: String =""
	get() = field + " [=GETTER RESULT]"
	set(value) {
		field += value
	}
}
	var c2 = Cutomer()
	c2.name = "yamada"
	println(c2.name)//getter getName()
	c2.name = " tarou"
	println(c2.name)//getter getName()
tanaka [=GETTER RESULT]
yamada [=GETTER RESULT]
yamada tarou [=GETTER RESULT]

field 識別子を使うとKotlinは自動バッキングフィールド にアクセスすることができます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする