kotlin的学习记录

apply   apply 

apply函数的详解   

MyData?.apply{

//MyData不为空的时候,执行操作这里。

}


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //总结回调问题解决了,现在也稍微理解了,还不是因为自己手敲代码,敲的少。


        // 3 创建初始化的那个类, 并且用类,   在新的一个类中进行实时回调
         var callInit3 = CallInit()
        //实时回调,操作
        callInit3.setEventListener(object: CallBack{

            override fun action(string: String) {
                TODO("Not yet implemented")
            }

            override fun myAction() {
                TODO("Not yet implemented")
            }

        })

        //匿名函数 == Lambada表达式
    }




    //这边继续写一个接口回调
   // 1 首先是接口,然后定义接口中的方法

    interface CallBack{
        //有参数的方法,  没有参数的方法
        fun action(string: String)
        fun myAction()
    }



    //2 在写一个类 初始化 并且调用起这个方法
    class CallInit {

        private lateinit var callBack2: CallBack

        //接口的初始化,操作。
       fun  setEventListener(callBack1: CallBack){
           this.callBack2 = callBack1

            callBack2.action("马东")
            callBack2.myAction()
       }


    }

}









    }


}

package com.example.myjavaapplication
import android.util.Log


class StudyGrammar {

    /*
      在接触Kotlin开始,的疯狂的提前的储备它的一些特性和它的一个经典的语法,要不你在写需求的时候,你会卡的很厉害,所以啊
      在开始的时候,要多用空余时间去学习它的一些特性,要不到写大需求的时候就凉凉了,就能卡si到写需求的过程中。

    * lambda表达式,在项目中用的非常多,非常多,所这个知识点必须非常熟悉 非常熟悉的 掌握
    * */

    //lambda表达式,=== 匿名函数

    //匿名函数  没有名字的方法   fun是关键字
    val anonymity = fun(){

    }


    //这个是没有参数,也没有返回值的 lambda表达式
    val lambdaFunction1:() -> Unit = {

    }


    //这个是基于 lambdaFunction1 上面的   没有参数,没有返回值的  lambda 简易写法  取掉 “ :() -> Unit ”
    val lambdaFunction2 = {

    }


    // lambda表达式,参数是int  返回值也是 int的
    val lambdaFunction3:(Int) -> Int = {
        // it代表传进来的参数, 这个有返回值的最后一行必须有对应返回的类型
        //最后一行的是  int的返回值  Int的返回值,都是最后的一行。
        it + 3
    }


    //这个方法是简化不了的,因为这个有 (Int)这个传进来的这个参数呢
    val lambdaFunction4:(Int)->Int={
        it+4  // 参数只有一个的时候,系统会默认自带it   如果有多个参数的时候,自己的定义一下。
    }


    //这个方法是可以简化的,因为()里面没有参数  可以直接取掉  " :()->Int "
    val lambdaFunction5:()->Int={
        5
    }

    val lambdaFunction5to1:()->Int={5}


    //这个方法基于上面 lambdaFunction5  简化的lambda表达式  去掉 " :()->Int " 后的简化方法
    val lambdaFunction6={
        6
    }


    //这些()里面有参数的这些是简化不了的,因为()里面都有参数。
    val lambdaMoreParameter1:(Int,Int,Int)->Int={x,y,r->
        x+y+r+7
        7
    }


    //()里面是参数类型        -> 所指的就是返回类型       函数内容的实现在{}里面     _ 下划线代表这个参数用不上,就不会报错了
    val lambdaMoreParameter2:(Int,Int)->Int ={x,_->
        x+8 // 会自动取识别最后一行的值,为返回值。
        8
    }

    //---------------------------------------------------- 1

    //lambda表达式的实现就是用一个 {} 实现的--->写入函数体
    //lambda表达式本身也就是一个函数
    fun mainTest() {
        //取掉() 简化写法    原本是test()
        test {

        }
    }

    //参数就是lambda表达式
    //我们的函数参数 最后一个为lambda表达式的时候 可以把{}写在外面 --> test(){}
    fun test(lambdaFunction1:()->Unit){

    }

    //---------------------------------------------------- 2

        fun mainTest2(){
            test2(1){

            }
    }

    fun test2(a:Int,lambdaFunction1:()->Unit){

    }

    //---------------------------------------------------- 3

    fun mainTest3() {
        //取掉() 简化写法    原本是test()
        //this 代表是 1
        test3{

        }
    }

    //参数就是lambda表达式
    //我们的函数参数 最后一个为lambda表达式的时候 可以把{}写在外面 --> test(){}
    fun test3(lambdaFunction1:Int.()->Unit){
        1.lambdaFunction1()
    }

    //---------------------------------------------------- 4

    fun mainTest4() {
        //取掉() 简化写法    原本是test()
        //this 代表是 4
        test4<Int>(4){
            Log.d("dong","打印出-->  $this ")
        }
    }

    //参数就是lambda表达式
    //我们的函数参数 最后一个为lambda表达式的时候 可以把{}写在外面 --> test(){}
    //定义泛型,泛型,加入的参数泛型
    fun <T>test4(re:T,lambdaFunction1:T.()->Unit){
        re.lambdaFunction1()
    }






    // ==============================================================================

    fun mainMethod() {
        //这块我关注的重点是, addResultMethod(1,1) 这个方法对应的传参数是对应的  number1:Int,number2:Int  这个是我需要关注的,可能这个就是它的这个语法的写法吧。
        addResultMethod(1,1)

    }

    // 匿名函数 == lambda表达式
    val addResultMethod={number1:Int,number2:Int->
        number1+number2
        Log.d("dong"," 两数相加结果是 : ${ number1+number2 } ")
    }


    /*匿名函数 入参 Int,   返回 Any类型
    *lambda表达式的参数是 Int,   lambda表达式的结果是Any类型
    *
    * Any == java中的 object
    * */
    val addResultMethod2 = {number: Int->
        when(number){
            1->"星期一"
            2->"星期二"
            3->"星期三"
            4->"星期四"
            else->-1
        }

    }

    fun mainMethod2() {
        //这块我关注的重点是, addResultMethod(1,1) 这个方法对应的传参数是对应的  number1:Int,number2:Int  这个是我需要关注的,可能这个就是它的这个语法的写法吧。
        addResultMethod2(1)
    }
    
// ==============================================================================
    
}

package com.example.myjavaapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import java.io.File


class MainActivity : AppCompatActivity() {
    private val info = "ma dong Learn grammar"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //普通的写法
        Log.d("dong"," ${info.length}")
        Log.d("dong"," ${info.substring(0,7)}")
        Log.d("dong"," ${info.toUpperCase()}")


        //apply内置函数的方式
        //info.apply特点:apply始终返回info本身String类型   apply里面是 this  本身的可以直接用
        val infoTest :String= info.apply {
            //一般匿名函数,都是it的状态,但是apply这个是持有this == info 本身
            length
            substring(0,12)
            toUpperCase()


            Log.d("dong","apply匿名函数里面打印的:$this")


            Log.d("dong"," $length")
            Log.d("dong"," ${substring(0,12)}")
            Log.d("dong"," ${toUpperCase()}")

        }

        Log.d("dong","val infoTest :String    $infoTest       ")


        //真正使用apply的规则写法
        info.apply{
            Log.d("dong"," $length")
        }.apply {
            Log.d("dong"," ${substring(0,16)}")
        }.apply {
            Log.d("dong"," ${toUpperCase()}")
        }

        Log.d("dong","=======================================================================================")

        //普通用法
        val file = File("E:\\a.txt")
        file.setExecutable(true)
        file.setReadable(true)
        Log.d("dong"," ${file.readLines()}")


        //apply的使用方法
        file.apply {
            //这个方法里面有this,谁点出它,就是谁  这个里面就是 file    this = file
            file.setExecutable(true)
        }.apply {
            file.setReadable(true)

        }.apply {
            Log.d("dong"," ${file.readLines()}")
        }

        // 使用场景 apply


       }

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值