既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
- Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
- Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象
- Kotlin学习——kt里面的函数,高阶函数 & 函数式编程 & 扩展函数和属性
- Kotlin学习——kt里的集合List,Set,Map & List集合的各种方法之Int篇
- Kotlin学习——kt里的集合,Map的各种方法之String篇
- Kotlin学习——kt里的作用域函数scope function,let,run,with,apply,also
目录
引出
1.kt里的委派模式Delegation;
2.kt里的特性,productivity boosters生产力助推器;
kt里的委派模式
Delegation Pattern 委派模式 by关键字
Kotlin支持在本地级别轻松实现委派模式,而无需任何样板代码。
- 将方法调用委托给负责的实现。委托对象是在关键字by之后定义的
package com.tianju.kt.scopeFunc
/\*\*
\* 定义一个接口
\*/
interface SoundBehavior {
fun makeSound()
}
/\*\*
\* 实现方法
\*/
class ScreamBehavior(val n:String): SoundBehavior {
override fun makeSound() = println("${n.uppercase()} !!!")
}
class RockAndRollBehavior(val n:String): SoundBehavior {
override fun makeSound() = println("I'm The King of Rock 'N' Roll: $n")
}
// 将方法调用委托给负责的实现。委托对象是在关键字by之后定义的
// Tom Araya is the "singer" of Slayer
class TomAraya(n:String): SoundBehavior by ScreamBehavior(n)
// You should know ;)
class ElvisPresley(n:String): SoundBehavior by RockAndRollBehavior(n)
fun main() {
val tomAraya = TomAraya("Thrash Metal")
tomAraya.makeSound()
val elvisPresley = ElvisPresley("Dancin' to the Jailhouse Rock.")
elvisPresley.makeSound()
}
Delegated Properties 属性委派
Kotlin提供了一种委托属性机制,允许将属性集的调用和get方法委托给某个对象。在这种情况下,委托对象应该具有getValue方法。对于可变属性,您还需要setValue。
package com.tianju.kt.scopeFunc
import kotlin.reflect.KProperty
class Example{
var p:String by Delegate()
override fun toString(): String {
return "Example Class"
}
}
class Delegate() {
operator fun getValue(thisRef: Any?, prop: KProperty<\*>): String {
return "$thisRef, thank you for delegating '${prop.name}' to me!"
}
operator fun setValue(thisRef: Any?, prop: KProperty<\*>, value: String) {
println("$value has been assigned to ${prop.name} in $thisRef")
}
}
fun main() {
val e = Example()
println(e.p)
e.p = "WATT"
}s
lazy懒加载
Kotlin标准库包含一堆有用的委托,比如懒惰的lazy、可观察observable的和其他的
package com.tianju.kt.scopeFunc
class LazySample {
/\*\*
\* 静态代码块
\*/
init {
println("created!")
}
/\*\*
\* by lazy 懒加载
\*/
val lazyStr: String by lazy {
println("computed!")
"my lazy"
}
}
fun main() {
// 创建对象时未初始化属性lazy
val sample = LazySample()
// 调用的时候才会初始化属性
println("lazyStr = ${sample.lazyStr}")
println(" = ${sample.lazyStr}")
}
map中存储属性
属性委派可用于在映射中存储属性。这对于解析JSON或执行其他“动态”操作等任务非常方便。
package com.tianju.kt.ktLast
/\*\*
\* 可以从map转换为对象
\*/
class User(val map: Map<String, Any?>) {
val name: String by map
val age: Int by map
}
fun main() {
val stringMap = mapOf(
"name" to "John Doe",
"age" to 25
)
println(stringMap)
val user = User(stringMap)
println("name = ${user.name}, age = ${user.age}")
}
productivity boosters生产力助推器
Named Arguments命名参数
与大多数其他编程语言(Java、C++等)一样,Kotlin支持根据方法和构造函数的定义顺序将参数传递给它们。Kotlin还支持命名参数,以允许更清晰的调用,并避免参数顺序错误。
package com.tianju.kt.ktLast
fun format(userName: String, domain: String) = "$userName@$domain"
fun main() {
println(format("mario", "example.com"))
println(format("domain.com", "username"))
println(format(userName = "foo", domain = "bar.com"))
println(format(domain = "frog.com", userName = "pepe"))
}
$占位符在String中
字符串模板允许您将变量引用和表达式包含到字符串中。当请求字符串的值时(例如,通过println),所有引用和表达式都会被实际值替换。
package com.tianju.kt.ktLast
fun main() {
val greeting = "Kotliner"
println("Hello $greeting")
![img](https://img-blog.csdnimg.cn/img_convert/b70ce9d6f3ca93224596ed9c36d0885a.png)
![img](https://img-blog.csdnimg.cn/img_convert/4b2c24f6419b995b1af9e33ee1e415b6.png)
![img](https://img-blog.csdnimg.cn/img_convert/14dba1d732a5b99c68232b9e3639c7bc.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**
1715062405372)]
[外链图片转存中...(img-OqjtzxVk-1715062405372)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**