Kotlinのoperatorとby実装依頼モード

1694 ワード

kotlinのクラスの依頼はoperator byキーで処理され,依頼は伝統的な設計モードとしてJavaでこのような設計モードを実現するには,自分でクラスの構造設計を行う必要がある.Kotlinでは、言語レベルのサポートを提供し、byキーワードで簡単に実現できます.
ケース1
  • おじいさんとおばあさんは100元の孫をあげました.そして、孫は嫁に茶碗を洗うように頼みました(息子は母に茶碗を洗うように頼みましたが、息子のお年玉は半減しました).
  • 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("  ")
        }
    }
    
    
    ケースソース