《Kotlin入门实战》CH6 | 扩展函数与扩展属性

Kotlin与Java的相互调用 Kotlin调用java public class MyJavaClass{ public static MyJavaClass object = new MyJavaClass(); @Override public String toString(){ return "MyJavaClass{}"; } } kotlin fun main(args: Array<String>){ //需要加反引用符号,!左侧的按键 阅读详情

扩展函数与属性

在Java中获取String中的第一个字符,StringUtil.firstChar(str)可能是这样写的,但是要想`"ABC".firstChar()是不可能的,因为Java中String是final类,在Kotlin中就不一样了。

1. 扩展函数

给String类中添加firstChar方法

fun String.firstChar(): String {
    if (this.length == 0) return ""
    else return this[0].toString()
}

fun main() {
    println("123".firstChar())  // 1
}

给List添加一个filter方法

fun <T> List<T>.Myfilter(f: (T) -> Boolean): List<T> {
    val result = ArrayList<T>().apply {
        this@Myfilter.forEach { 
            if (f(it)) add(it)
        }
    }
    return result
}

fun main() {
    val list = listOf<Int>(1, 2, 3, 4)
    println(list.Myfilter { it % 2 == 0 })
}

2. 扩展属性

var <T> MutableList<T>.firstElement: T
    get() {
        return this[0]
    }
    set(value) {
        this.set(0, value)
    }

fun main() {
    val list = listOf<Int>(1, 2, 3, 4)
    println((list as MutableList).firstElement)
}

3. 扩展的实现

把代码反编译成java代码,可以发现,拓展方法和属性都是被翻译成了静态的方法

public final class ImplementFunKt {
   @NotNull
   public static final String firstChar(@NotNull String $this$firstChar) {
      Intrinsics.checkParameterIsNotNull($this$firstChar, "$this$firstChar");
      return $this$firstChar.length() == 0 ?"":String.valueOf($this$firstChar.charAt(0));
   }
    
   public static final Object getFirstElement(@NotNull List $this$firstElement) {
      Intrinsics.checkParameterIsNotNull($this$firstElement, "$this$firstElement");
      return $this$firstElement.get(0);
   }

   public static final void setFirstElement(@NotNull List $this$firstElement, Object value) {
      Intrinsics.checkParameterIsNotNull($this$firstElement, "$this$firstElement");
      $this$firstElement.set(0, value);
   }
}

4.this冲突

如前面的filter函数中出现this冲突,

fun <T> List<T>.Myfilter(f: (T) -> Boolean): List<T> {
    val result = ArrayList<T>().apply {
        this@Myfilter.forEach {
            if (f(it)) add(it)
        }
    }
    return result
}

this会默认指向最内层对象,this@Myfilter就是使用限定符解决this指针冲突的问题

Kotlin协程高并发服务器:四种核心模式与性能优化实战 并发编程是现代服务端开发的核心技术,通过合理利用计算资源提升系统吞吐量。Kotlin协程基于挂起函数和状态机机制,在用户态实现轻量级线程切换,避免了传统线程模型的内存开销和上下文切换成本。这种非阻塞并发模型特别适合I/O密集型场景,能够显著提升资源利用率和系统性能。在实际工程实践中,开发者需要掌握每请求一协程、生产者-消费者等核心模式,并注意调度器选择和资源管理。针对高并发服务器场景,Kotlin协程提供了结构化并发和背压处理等机制,帮助构建稳定高效的服务端应用,解决传统多线程模型在应对高并发请求时的性能瓶 阅读详情

相关推荐

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地提供了隔离型全桥LLC谐振变换器的建模、仿真与参数设计全套技术资料,涵盖Simulink/Plecs仿真模型、详细设计报告及Mathcad计算书,内容涉及开环与闭环控制、软启动过程、恒压恒流双闭环竞争控制等多种工况。资料还拓展至多相交错LLC、双向CLLC拓扑以及V2G(Vehicle-to-Grid)电动汽车充放电等前沿应用场景,并融合状态估计算法(如卡尔曼滤波、扩展卡尔曼滤波、粒子滤波)与神经网络技术进行系统性能优化,配套PPT说明与高水平EI期刊复现案例,为电力电子领域的科研与工程设计提供完整的技术支撑; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校研究生、科研人员,以及从事高频DC-DC变换器、新能源电源系统开发的工程师,具备扎实电路理论基础和Matlab/Simulink仿真能力者尤佳; 使用场景及目标:①支撑LLC谐振变换器相关的科研课题、学位论文或项目开发;②开展高频高效电源的参数设计、效率优化与动态响应分析;③学习并复现高水平期刊中先进的控制策略,如变频控制、混合移相控制及智能优化算法;④掌握Simulink/Matlab在电力电子系统建模、控制算法实现与状态估计中的综合应用; 阅读建议:建议结合仿真模型、Mathcad计算书与设计报告三位一体同步研习,重点理解主电路参数设计与闭环控制逻辑之间的耦合关系,优先运行典型算例并调试关键模块,有条件者可进一步推进至硬件原型验证,并积极探索状态估计与人工智能算法在电力系统动态建模中的融合应用。

《Kotlin入门实战》CH7 | 集合类

集合类 在Java类库中有一套相当完整的容器集合类来持有对象。Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java类库的基础上进行了改造和扩展,引入了不可变集合类,同时扩展了大量方便实用的功能,这些功能的API都在kotlin.collections包下面。 集合类概述 集合层次 Iterable 可遍历...

落红不是无情物 168

stm32开发3D打印机(一)——介绍(已完成)

如何运用stm32开发3D打印机

Nico_jion的博客 1万+

《Kotlin入门实战》CH9 | 文件IO,正则和多线程

文件IO,正则和多线程 得益于kotlin的扩展函数,kotlin对java中api进行了改进,对于java中好用的api直接使用,对于不好用的api进行了扩展和改进。 1 文件IO操作 读写 fun main() { val f = File("test.txt") // 写入文件 f.writeText("hello kotl...

落红不是无情物 278

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 644

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 977

《离线AI安卓APP》ch03 Kotlin 速成(只学这个项目用到的)

学习目标 读完本章,你应当能够: 说清 val 和 var 的区别,以及为什么本工程默认全用 val; 读懂并写出空安全三件套 ? / ?. / ?:,并解释为什么本工程几乎不用 !!; 用 data class + copy() 做"不可变更新",并说清它和"原地改列表"对 UI 刷新的影响;

ai2work的博客 953

RFID射频识别技术介绍及简单应用

简单介绍RFID技术及其简单应用,后附简单门禁制作方法和代码

来者皆是客。 1万+

kotlin杂谈系列八

Kotlin杂谈系列八

Pandaer杂货铺 3112

傻白入门芯片设计,wafer/die/chip/cell(一)

芯片设计的一些基本概念

qq_46675545的博客 2万+

《从零搭建Vue3项目实战》(AI辅助搭建Vue3+ElemntPlus后台管理项目)零基础入门系列第一篇:开发环境准备

vue3入门实战:环境准备篇

感谢阅读 1385

使用官方 kotlin-sdk 构建 MCP 服务器:Kotlin MCP Server Development Expert 实战指南

在 awesome-copilot 仓库中,[agents/kotlin-mcp-expert.agent.md](https://link.gitcode.com/i/2f7f80456d37562744b8f84f38580d49) 定义了一位专注于"用官方 `io.modelcontextprotocol:kotlin-sdk` 构建 Model Context Protocol(MCP)服

gitblog_00373的博客 231

Jenkins部署前后端分离项目最全图文教程(手把手教学)

最近Jenkins部署的热度比较高,于是就想出一篇关于我是如何使用Jenkins部署前后端分离项目的,本篇记录了我是如何一步一步去配置、搭建和部署的完整流程,每一行代码都进行了实测和讲解,通过图文的教学写成博客分享给大家!

黄团团的个人博客 4779

如何为Kotlin断言库Atrium编写自己的expectation函数:从1行Boolean检查到自定义Builder

Atrium 是一款开源的 **Kotlin 多平台断言(expectation)库**,支持 JVM、JS 与 Android,设计上对标 AssertJ 但提供了更灵活的错误报告与扩展能力。本文将带你 **如何为 Kotlin 断言库 Atrium 编写自己的 expectation 函数**:从一个 1 行代码的 Boolean 检查,逐步进阶到使用 `_logic` 与 `assertio

gitblog_00609的博客 431

【Qt】解决 FTH: (11284): *** Fault tolerant heap shim applied to current process. (亲测有效)

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers。容错堆垫片应用到当前的过程。这通常是由于以前的崩溃。win + r,输入regedit。

Fanjufei的博客 830

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

GBrain 的 resolve-before-asking 技能:耗尽大脑检索链再打扰用户的身份问题门控实践

本技能是 GBrain(Garry's Opinionated OpenClaw/Hermes Agent Brain)中一个身份识别问题门控(identity-question gate):任何"X 是谁?""Ta 和你什么关系?"的问题在到达用户之前,必须先跑完大脑的完整检索链——思考 → 搜索+读页 → 挂载源查询 → 时间线/图谱 → 网络。只有全部升级失败后才能询问用户,且必须带着假设去

gitblog_00359的博客 797

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java中也能用Kotlin断言库?Atrium Java互操作完整指南

**Atrium** 是一个面向 Kotlin 的多平台断言/期望(expectation)库,支持 JVM、JS 和 Android。对拥有 Java 代码的开发者来说,Atrium 的 Java 互操作能力尤其值得关注:它既能帮你优雅地测试 Java 类型的返回值,又原生支持 Java 9+ 的模块系统(JPMS)。本文就是这份 **Atrium Java 互操作完整指南**,带你快速上手。?

gitblog_00573的博客 444

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

视频情感分析新思路:拆解CH-SIMS数据集的模态差异与标注技巧

本文深入探讨了视频情感分析的新思路,重点解析了CH-SIMS数据集的核心价值。该数据集通过为文本、音频、视觉模态提供独立的细粒度情感标签,揭示了情感表达的复杂性与模态间差异,为克服传统多模态情感分析中特征同质化问题提供了关键数据支持。文章进一步阐述了如何利用这种标注方法设计多任务学习框架,以构建更精准、可解释性更强的模态感知模型。

sss66的博客 502

Java/Kotlin TCP Socket TLS/SSL加密通讯实战指南

在网络编程中,TCP Socket是实现客户端与服务器端稳定双向通讯的基础技术。然而,明文传输的数据在公网环境中面临被截获和窃取的风险,因此数据加密成为保障通讯安全的核心原理。TLS/SSL协议作为业界标准,通过非对称加密进行密钥交换、对称加密保障传输效率,并利用数字证书实现身份认证,为数据传输提供了机密性、完整性和可信性三重保障。这一技术价值在于,它能有效防止中间人攻击和数据泄露,是构建安全网络应用的基石。在Java/Kotlin开发实践中,通过SSLSocket和SSLServerSocket可以便捷地

weixin_33845881的博客 527

Atrium多平台测试实战:同一套断言如何跑在JVM、JS与Android上

Atrium 是一个开源的 **Kotlin 多平台测试断言库**(expectation/assertion library for Kotlin),支持 JVM、JS 与 Android 三大平台。它的核心卖点只有一句话:**在 commonMain 里写一次断言,JVM、JS、Android 全部复用**,失败时还能输出结构清晰、像"人话"一样的错误报告。这篇文章带你用官方样例项目,快速跑通

gitblog_00378的博客 424

Google ADK for Kotlin:用Kotlin构建原生AI Agent实战指南

人工智能Agent是当前AI应用开发的热点方向,而Agent开发框架通过抽象化运行时、工具调用与会话管理,帮助开发者高效构建智能体。Google 推出的ADK(Agent Development Kit)最初面向Python,如今正式扩展至Kotlin,将Agent能力无缝带入Android与JVM生态。其核心设计以“代码驱动的编排”为哲学,通过注解声明Agent与Tool,支持流式输出和会话状态管理,使开发者能够用熟悉的Kotlin语法快速实现模型决策与工具执行的闭环。从云端Gemini API到端侧部署

weixin_32296621的博客 107

Easy Javadoc:Java/Kotlin文档注释生成与翻译的技术架构深度解析

在Java和Kotlin开发中,编写高质量的API文档注释是保证代码可维护性和团队协作效率的关键环节。然而,手工编写Javadoc和Kdoc注释不仅耗时耗力,还容易因命名不一致导致文档质量参差不齐。Easy Javadoc作为IntelliJ IDEA平台的智能文档注释插件,通过**自动化生成**、**智能翻译**和**多语言支持**三大核心能力,为开发者提供了一站式的文档注释解决方案。 ##

gitblog_00503的博客 324

Kotlin多平台断言库Atrium完全指南:为什么它比AssertJ更能告诉你测试为什么失败

Atrium 是一款开源的 Kotlin 多平台断言库,同时支持 JVM、JS 和 Android。与常见的断言工具不同,它的设计目标只有一个:当测试失败时,用尽可能详细、可读的方式告诉你"哪里错了、为什么错"。本指南面向刚接触 Kotlin 测试的新手,带你快速理解 Atrium 的核心能力,以及它相比 AssertJ 在失败报告上的独特优势。 ## 🤔 断言测试的痛点:为什么失败? 传统

gitblog_01083的博客 750

Chopper与Retrofit对比分析:从Java/Kotlin到Dart/Flutter的迁移指南

在当今跨平台移动应用开发领域,**Chopper**作为Dart/Flutter生态中的HTTP客户端生成器,为从Java/Kotlin背景迁移到Flutter的开发者提供了熟悉而强大的解决方案。这款灵感源自Retrofit的工具,通过代码生成技术为Dart/Flutter开发者带来了类型安全的HTTP客户端体验。 [![Chopper Flutter Favorite认证](https://r

gitblog_00964的博客 748

8.4 Spring Boot集成Kotlin混合Java开发

8.4 Spring Boot集成Kotlin混合Java开发 本章介绍Spring Boot集成Kotlin混合Java开发一个完整的spring boot应用:Restfeel,一个企业级的Rest API接口测试平台(在开源工程restfiddle[1]基础上开发而来)。 系统技术框架 编程语言:Java,Kotlin 数据库:Mongo Sprin...

AI天才研究院 9275
上一篇: 《Kotlin入门实战》CH5 | 函数与函数式编程
下一篇: 《Kotlin入门实战》CH7 | 集合类
KriyWu
博客等级 码龄9年 3粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值