kotlin高阶函数:简化常用的API

1.apply函数简化intent.putExtra():

val intent = Intent(this, MainActivity::class.java).apply { 
            putExtra("param1","data1")
            putExtra("param2","data2")
        }
        startActivity(intent)

2.简化SharedPreferences:

 fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) {
        val editor = edit()
        editor.block()
        editor.apply()
    }
    

使用:
     getSharedPreferences("data", Context.MODE_PRIVATE).open {
            putString("haha", "llaa")
            putBoolean("married", false)
        }

3.简化ContentValues:

fun cvOf(vararg pairs: Pair<String, Any?>) =  ContentValues().apply {
        for(pair in pairs){
            val key = pair.first
            val value = pair.second
            when(value){
                is Int -> put(key, value)
                is Long -> put(key, value)
                is Short -> put(key, value)
                is Float -> put(key, value)
                is Double -> put(key, value)
                is Boolean -> put(key, value)
                is String -> put(key, value)
                is Byte -> put(key, value)
                is ByteArray -> put(key, value)
                null -> putNull(key)
            }
        }
    }

4.懒加载技术实现lazy():

  fun <T> later(block: () -> T) = Later(block)

    class Later<T>(val block: () -> T){
        var value: Any? = null

        operator fun getValue(any: Any?, prop: KProperty<*>): T{
            if (value == null){
                value = block
            }
            return value as T
        }
    }

使用:
    val haha:String by later {
        "hhaa"
    }

5.泛型实化简化startActivity()并附带intent传值

    
    inline fun <reified T> startActivity(context: Context, block: Intent.() -> Unit){
        val intent = Intent(context, T::class.java)
        intent.block()
        context.startActivity(intent)
    }
使用:
  startActivity<MainActivity>(this){
        putExtra("haha","1111")
        putExtra("hahaaaa","1111")
    }

6.简化N个数的最大值最小值:

   fun <T : Comparator<T>> MyMax(vararg nums: T): T{
        if (nums.isEmpty()) throw RuntimeException("params can not be empty")
        var maxNum = nums[0]
        for (num in nums){
            if (num > maxNum){
                maxNum = num
            }
        }
        return maxNum
    } 

使用:
       val a = 1
        val b = 3
        val c = 2
        val largest = MyMax(a,b,c)

7.简化Toast:

   
    fun String.showToast(context: Context, duration: Int = Toast.LENGTH_SHORT){
        Toast.makeText(context, this, duration).show()
    }
    fun Int.showToast(context: Context, duration: Int = Toast.LENGTH_SHORT){
        Toast.makeText(context, this, duration).show()
    }

用法:
        "ahah".showToast(this, Toast.LENGTH_LONG)

8.简化Snackbar:

fun View.showSnackbar(text: String, actionText: String?=null, duration: Int = Snackbar.LENGTH_SHORT, block: (() -> Unit)? =null){
        val snackbar = Snackbar.make(this, text, duration)
        if (actionText != null && block != null){
            snackbar.setAction(actionText){
                block()
            }
        }
        snackbar.show()
    }

    fun View.showSnackbar(text: String, actionResId: Int?=null, duration: Int = Snackbar.LENGTH_SHORT, block: (() -> Unit)? =null){
        val snackbar = Snackbar.make(this, text, duration)
        if (actionResId != null && block != null){
            snackbar.setAction(actionResId){
                block()
            }
        }
        snackbar.show()
    }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值