Kotlinのoperatorとby実装依頼モード
1694 ワード
kotlinのクラスの依頼は
ケース1おじいさんとおばあさんは100元の孫をあげました.そして、孫は嫁に茶碗を洗うように頼みました(息子は母に茶碗を洗うように頼みましたが、息子のお年玉は半減しました). 息子のお父さんは息子に茶碗を洗うように頼んだ
茶碗を洗う能力だけを彼に任せた.
operator by
キーで処理され,依頼は伝統的な設計モードとしてJavaでこのような設計モードを実現するには,自分でクラスの構造設計を行う必要がある.Kotlinでは、言語レベルのサポートを提供し、byキーワードで簡単に実現できます.ケース1
package com.kotlin.flong.oop_fp
import kotlin.reflect.KProperty
//
fun main(args: Array) {
var myson = MySon()
// 100
myson.money =100
//
println(myson.money)
}
class MySon {
//
var money: Int by Mother()
}
class Mother {
//
var mySonMoney = 0
// ,
var myWallt = 0
operator fun getValue(myson: MySon, p: KProperty): Int {
return mySonMoney;
}
operator fun setValue(myson: MySon, p: KProperty, i: Int) {
mySonMoney = 50
myWallt += i - 50
}
}
ケース2//
fun main(args: Array) {
val son = SonFather()
son.wash()
}
interface WashPower{
//
fun wash()
}
class Son1 :WashPower{
override fun wash() {
println(" ")
}
}
//
class SonFather :WashPower by Son1(){
}
ケース3茶碗を洗う能力だけを彼に任せた.
//
fun main(args: Array) {
val son = SonFather1(BigSon())
son.wash()
}
interface WashPower1{
//
fun wash()
}
class BigSon :WashPower1{
override fun wash() {
println(" ")
}
}
//
class SonFather1(var wash:WashPower1) :WashPower1 by wash{
override fun wash() {
println(" ")
wash.wash()
println(" ")
}
}
ケースソース