kotlin核⼼编程pdf下载_Kotlin核⼼编程打印类型名称
println(string.javaClass.name)
复制代码
如果kotlin没有声明返回值类型,则默认返回值类型为Unit
声明类的属性
inner class Book(var name: String) {
fun printName() {
println(this.name)
}
}
复制代码
优先使⽤val写出防御性代码
函数类型
(int) -> Unit
() -> Unit
(Int, String) -> Unit
(errorCode: Int, errMsg: String) -> Unit
(errorCode: Int, errMsg: String?) -> Unit
((errorCode: Int, errMsg: String?) -> Unit)?
/**
* 函数类型参数
*/
fun filter(name:String, filter: (country: Country) -> Unit) {
}
复制代码
返回值为⼀个函数
(Int) -> ((Int) -> Unit)
复制代码
双冒号调⽤类⽅法 class::fun
匿名函数android编程入门指南 pdf
每个Function都有⼀个Invoke函数,所以想要执⾏函数体,需要调⽤函数.invoke()
private fun foo(int: Int) = { _: Int ->
}
private fun list() {
listOf(1, 2, 3).forEach { foo(it).invoke(it) }
}
复制代码
Lambda
val sum: (Int, Int) -> Int = {x,y -> x+y}
如果Lamba表达式的返回值不是Unit, 那么默认最后⼀⾏就是其返回值扩展函数
ample.kotlincore
import android.view.View
fun View.invisiable() {
visibility = View.INVISIBLE
}
() {
visibility = View.GONE
}
复制代码
if else 保证代码安全,消除副作⽤
fun ifExpression(flag: Boolean) {
val a = if (flag) "fage" else ""
}
复制代码
枚举配合when表达式
ample.kotlincore
/**
* 星期⼏枚举
*/
enum class Day(value: Int) {
MON(1),
TUE(2),
WEN(3),
THU(4),
SAT(6),
SUN(7)
}
/**
* ⽇程
*/
fun schedule(sunny: Boolean, day: Day) {
when(day) {
Day.SAT -> basketball()
Day.SUN -> finish()
Day.FRI -> appointment()
else -> when {
sunny -> library()
else -> study()
}
}
}
fun basketball() {}
fun fishing() {}
fun appointment() {}
fun library() {}
fun study() {}
复制代码
泛型
泛型类实现查⼀个元素是否在数组中,是则返回本⾝,反之返回null ample.kotlincore
/**
* 查数组中是否含有⼀个对象
*/
class SmartClass : ArrayList() {
fun find(t: T) : T? {
val index = super.indexOf(t)
return if (index >= 0) (index) else null
}
复制代码
使⽤扩展函数实现上⾯的需求
fun ArrayList.find(t: T): T? {
val index = this.indexOf(t)
return if (index >= 0) this[index] else null
}
复制代码
Java泛型兼容
因为泛型实Java1.5版本才引⼊的,所以Java允许没有具体类型参数的泛型类类型约束上界
/**
* 泛型类
*/
class Plate(val t: T) // 泛型类
open class Fruit(val weight: Double) // 开放类
class Apple(weight: Double): Fruit(weight) // 继承
class Banana(weight: Double): Fruit(weight) // 继承
class FruitPlate(val t: T) // 泛型上界
复制代码
泛型擦除
Kotlin和Java中泛型是通过类型擦除来实现的,为什么呢
Java向后兼容:就是⽼版本的Java⽂件编译之后可以运⾏在新版本的JVM上使⽤内联函数获取泛型
/**
* 使⽤内联函数获取泛型类型
*/
inline fun Gson.fromJson(json: String) : T {
return Gson().fromJson(json, T::class.java)
}
复制代码
协变
只能读 out关键字 相当于传⼊的类型之能是约定类型的⼦类
* 协变
*/
interface ListCustom : Collection {}
复制代码
逆变
与协变相反,相当于传⼊的类型是⽗类,只能写,不能读
interface ListCustom : Collection{}
复制代码
伴⽣对象的静态扩展函数
object Test {
@JvmStatic
fun main(args: Array) {
Log.d("tag", "fage")
}
}
复制代码
标准库中的扩展函数 run let also apply takeIf
run
单独作⽤域
重新定义变量
返回范围内的最后⼀个对象
let apply
类似,唯⼀不同的是返回值
apply返回的是原来的对象,let返回的是闭包的值,也就是闭包的最后⼀⾏
also
与apply⼀致,返回的是原来的对象
返回值是函数的接收者
takeIf
不仅仅想判空,还想加⼊条件,这个时候let就显得有点不⾜了,就要使⽤takeIf了val result = student.takeIf{it.age > 18}.let{...}
Android 中的扩展应⽤
给ImageView添加扩展
fun ImageView.loadImage(url: String) {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论