ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kotlin从头开始(一),带你轻松理解Android-Hook机制

2022-01-23 16:05:19  阅读:328  来源: 互联网

标签:String val Int Kotlin Hook getString kotlin Android 函数


此处有没有一点疑惑,为什么类型推导得出的类型是 () -> Unit ?

此时只要回头看一下Kotlin中函数是如何声明的,就知道为什么了。

为什么这里的函数不是fun开头的

  • 其实这里的函数是匿名函数,上述的写法就是把这个匿名函数赋值给了变量。

  • 可以直接使用变量名进行调用或者使用invoke,方式如下:

fun main() {

val getString : () -> Unit = {

println(“hello kotlin”)

}

getString()

getString.invoke()

}

  • 两种方式都可以成功调用,这里的()其实是invoke操作符的重载。

var getString = {“this is kotlin”} 是什么意思

跑一下上面的代码,看看运行结果是啥

fun main() {

val getString = {

“hello kotlin”

}

print(getString.invoke())

}

  • 结果打印了hello kotlin。

  • 在括号中,最后一行将会作为返回值。如果把代码修改为下面的样子

fun main() {

val getString = {

“hello kotlin”

666

}

print(getString.invoke())

}

返回值就成了666。 如果最后一行是函数,则就成了函数中的函数,也就是高阶函数

稍微复杂一点

val testPlus = {number1: Int, number2: Int -> number1 + number2}

  • 这个函数中,number1和number2分别作为两个参数,函数的功能是number1+number2,则返回值的类型就是Int。相当于Java中的

public int testPlus(int number1, int number2) {

return number1 + number2;

}

再复杂一点

刚刚提到了,函数分为声明和实现两个部分。那么自然就可以先声明再实现。

先声明:

val getString : (Int) -> String

再实现:

getString = fun(number) = number.toString()

  • 声明的时候,参数类型为Int,返回值为String。实现的时候,number会被自动推导为int,函数实现要返回String类型,如果toString换成toShort,编译器就会报错。

如果把成整体就是下面的样子:

fun main() {

val getString : (Int) -> String = fun(number) = number.toString()

getString

}

tip:上述代码中,把鼠标悬停在getString的调用上,按下Shift+Ctrl+P,就成看到getString的参数和返回值。

image.png

那么,这么写有什么好处呢?

除了装b,大概是没有其他用处的。

茴字的最后一种写法

声明和实现一起写,应该怎么写呢

val getString : (Int, String) -> String = {values, str -> “value
is $values str is $str”}

  • values是Int类型,str是String类型,返回值是String类型

还能再简化一点吗

能,但是只能有一个参数

val getString : (String) -> Unit = {

println(“string is $it”)

}

  • 按照上面的说法, 大括号后面应该出现一个str->,但是因为只有一个参数,所以可以用it代替。

在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回

那两个甚至多个参数的时候,可以简写吗

能,但是只能有一个参数

val getString : (String) -> Unit = {

println(“string is $it”)

}

  • 按照上面的说法, 大括号后面应该出现一个str->,但是因为只有一个参数,所以可以用it代替。

在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回

那两个甚至多个参数的时候,可以简写吗

标签:String,val,Int,Kotlin,Hook,getString,kotlin,Android,函数
来源: https://blog.csdn.net/m0_66264673/article/details/122652594

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有