Kotlin学习——kt入门合集博客 & kt里的委派模式Delegation & kt里的特性

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

目录

引出


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/b535b560a959a3cf77825275e526546c.png)
![img](https://img-blog.csdnimg.cn/img_convert/f9561ca99791d4f27aabb5a619a0ad7d.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

.(img-7C4XxMNm-1715062435163)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值