Java开发人员Kotlin(第1部分)

java开发人员kotlin(第1部分)

Java 作为编程语言的佼佼者,其开发者在学习 Kotlin 时常会犯一些相似的错误。 这并非真正的错误,而是指开发者习惯性地沿用 Java 的编程思维,而非充分利用 Kotlin 的特性所导致的代码风格问题。

本文旨在帮助您识别这些常见的代码风格问题,并学习如何用更符合 Kotlin 风格的方式进行改进。

本系列的第一部分将涵盖以下主题:

数据类的运用空安全性的运用默认不变性

数据类的运用

虽然越来越多的 Java 开发者开始熟悉记录类,但这个主题仍然值得关注,因为 Java 记录类和 Kotlin 数据类之间存在一些差异。

立即学习“Java免费学习笔记(深入)”;

Java 风格:

public class Person {  private String name;  private int age;  public Person(String name, int age) {    this.name = name;    this.age = age;  }  // getters, setters, ...}

或者使用记录类:

public record Person(    String name,    int age) {}

Kotlin 风格:

data class Person(val name: String, var age: Int)

Java 记录类和 Kotlin 数据类之间存在一些关键差异:

两者都是不可变的数据载体。Java 中的字段隐式为 final,创建后不可修改;Kotlin 中,您可以使用 valvar 来选择字段的可变性。Java 记录类隐式为 final 并密封,不可扩展;Kotlin 数据类则可以扩展。Kotlin 可以重写 equalshashCodetoString 方法,Java 则不行。Kotlin 提供开箱即用的复制方法,Java 没有。

一些示例:

在 Java 中复制对象:

Person p2 = new Person(p1.getName(), p1.getAge());

Kotlin:

val p2 = p1.copy(age = 42)

Java 中的解构声明:

String name = p1.getName();int age = p1.getAge();

Kotlin:

val (name, age) = p1println(name) // "john"println(age) // 42

参考

Kotlin 数据类Baeldung:Kotlin 数据类

空安全性的运用

Kotlin 的空安全性是其最强大的功能之一,它能有效避免与 null 相关的运行时错误。

1. 可空类型

Kotlin 中,可空类型是显式声明的。这意味着您可以声明一个可能包含 null 值的变量,但必须在声明中使用 ? 运算符。

不可为空类型(默认行为)

默认情况下,Kotlin 类型是不可为空的,不能保存 null 值。

val name: String = "john" // 不可为空name = null // 编译错误!

可空类型

要声明可空类型,需使用 ? 运算符:

val name: String? = null // 可空

2. 安全调用

安全调用运算符 ?. 允许您安全地调用方法或访问属性,避免 NullPointerException

示例

val name: String? = nullprintln(name?.length) // 打印 null,而非抛出异常

?. 运算符会检查对象是否为 null,如果是,则返回 null;否则继续调用方法或访问属性。

3. Elvis 运算符 (?:)

Elvis 运算符 ?: 提供了简写形式,如果左侧表达式为 null,则返回默认值。

val name: String? = nullval length = name?.length ?: 0 // name 为 null 时,默认值为 0println(length) // 0

4. !! 运算符(非空断言)

!! 运算符告诉编译器该值不为空。如果值为 null,则会抛出 NullPointerException

val name: String? = nullprintln(name!!) // 抛出 NullPointerException

提示:建议尽量避免使用 !! 运算符。

5. 函数参数的可为空性

定义函数时,可以指定参数是否可为空。

fun greet(name: String?) {    println("Hello, ${name ?: "guest"}")}greet(null) // Hello, guestgreet("Alice") // Hello, Alice

6. 安全转换(as? 运算符)

安全强制转换运算符 as? 在转换失败时返回 null。

val obj: Any = "Kotlin"val str: String? = obj as? Stringprintln(str) // 打印 "Kotlin"val num: Int? = obj as? Intprintln(num) // 打印 null

7. lambda 表达式中的空安全性

在 lambda 表达式中同样可以使用空安全特性:

val list: List = listOf("Kotlin", null, "Java")val lengths = list.map { it?.length ?: 0 }println(lengths) // 打印 [6, 0, 4]

8. 使用 let 函数

let 函数允许您在非空对象上执行代码块,通常用于安全地处理可空对象。

val name: String? = nullval result = name?.let {    println("name is not null: $it")    it.length // name 为 null 时,此行不会执行} ?: "default value"println(result) // 打印 "default value"

9. 最佳实践

避免使用 !! 运算符使用安全调用和 Elvis 运算符安全处理可空类型谨慎使用可空类型

参考:

Kotlin 空安全

默认不变性

Kotlin 鼓励函数式编程风格。不变性在避免错误,尤其是在多线程应用中,至关重要。

Kotlin 更倾向于使用不可变对象。这使得代码更简洁、更易预测。

1. 默认不可变变量 (val)

Kotlin 中,使用 val 关键字声明的变量默认是不可变的。这与 Java 中的 final 变量类似,但有一些关键区别

Kotlin 的 val 变量是只读的,初始化后无法更改其值。但如果该值是一个对象,则该对象的属性仍然可以更改,除非这些属性本身被声明为 val

示例:

val name = "Kotlin"// name = "Java" // 编译错误!

与 Java 的区别:Java 中,final 关键字只保证变量的引用不可变,但对象本身可能可变。Kotlin 的 val 则保证了变量及其引用的对象不可变。

可变变量示例:
使用 var 关键字声明可变变量:

var age = 42age = 43 // 没有编译错误

提示:
尽可能使用 val 而不是 var

2. 不可变集合

Kotlin 也鼓励使用不可变集合。不可变集合创建后无法修改。

val numbers = listOf(1, 2, 3)numbers.add(4) // 编译错误!

如果需要修改集合,可以使用 mutableListOf() 等可变集合类型。

val mutableNumbers = mutableListOf(1, 2, 3)mutableNumbers.add(4) // 允许

与 Java 的区别:Java 集合(如 ArrayList)默认是可变的。

3. 不可变数据类

Kotlin 数据类默认是不可变的。属性通常声明为 val

data class Person(val name: String, val age: Int)val person = Person("Alice", 42)person.name = "Bob" // 编译错误!

4. 密封类中的不变性

Kotlin 密封类也可以是不可变的,常用于表示受限的类层次结构,例如状态或响应。

sealed class Responsedata class Success(val data: String) : Response()data class Error(val message: String) : Response()val response: Response = Success("Data loaded successfully")response = Error("Something is wrong") // 编译错误!

以上就是Java开发人员Kotlin(第1部分)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/191109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
什么是DLL劫持
上一篇 2026年9月7日 08:19:53
阿里云通义大模型新技术:MoE模型训练专家平衡的关键细节
下一篇 2026年9月7日 08:23:49

相关推荐

  • 静脉注射2兑换码有什么 静脉注射2最新2025兑换码分享

    静脉注射2最新通用兑换码包括:iv2888、venom2025等,可在游戏内直接使用,领取黄金注射器皮肤、夜视药剂×5以及1000经验奖励,限时有效,先到先得!此外,通过修改器还可解锁更多特权福利。 无限物品畅玩|游戏作弊工具推荐: 2025年最新静脉注射2兑换码汇总如下: IV2888:可兑换限定…

    2026年9月20日
    000
  • Steam新品节最热玩前50公布!

    Steam新品节最热玩前50公布!Steam新品节最热玩前50公布!Steam新品节最热玩前50公布!Steam新品节最热玩前50公布!

    steam公布了2025年10月版steam新品节最热玩游戏的前50名,本文为您简单整理如下,完整榜单请点此>>> 第1-第10: 第11-第20: 第21-第30: 第31-第40: 第41-第50: 以上就是Steam新品节最热玩前50公布!的详细内容,更多请关注创想鸟其它相关…

    2026年9月20日 用户投稿
    000
  • iPhone命名或跳过19

    iPhone命名或跳过19 近日,科技圈内流传着一个引人瞩目的猜测:苹果公司在为其未来产品命名时,可能会选择直接跳过“iphone 19”这个名称。这一传闻并非空穴来风,而是基于苹果公司以往的命名策略、行业发展趋势以及对品牌形象的整体考量。如果成真,这将是iphone命名史上一个值得记录的时刻。 历…

    2026年9月20日
    100
  • 2025汽车品牌口碑指数NPS公布:小米、问界仅44分

    2025汽车品牌口碑指数NPS公布:小米、问界仅44分2025汽车品牌口碑指数NPS公布:小米、问界仅44分2025汽车品牌口碑指数NPS公布:小米、问界仅44分2025汽车品牌口碑指数NPS公布:小米、问界仅44分

    10月17日,有调研机构发布了2025中国汽车品牌口碑指数nps。其中,小米汽车与aito问界品牌的nps(净推荐值)均仅为44分,远低于行业头部品牌。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 小米汽车 报告显示,新能源汽车主流品牌的…

    2026年9月20日 用户投稿
    000
  • 三大新势力新增订单曝光:鸿蒙智行爆单 尊界热度不减

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 9月1日,车fans创始人孙少军公布了多家造车新势力在上周(8月25日至8月31日)的新增订单情况: 鸿蒙智行(涵盖问界、智界、享界、尊界、尚界五大品牌)上周新增订单约3.5万份,其中尊界品牌的…

    2026年9月20日
    200
  • Linux如何卸载软件并清理依赖包

    Linux如何卸载软件并清理依赖包Linux如何卸载软件并清理依赖包Linux如何卸载软件并清理依赖包Linux如何卸载软件并清理依赖包

    卸载软件并清理依赖可释放空间和保持系统整洁。Ubuntu/Debian使用sudo apt purge 软件名彻底卸载,sudo apt autoremove清理依赖;CentOS/RHEL/Fedora使用sudo dnf remove 软件名卸载,sudo dnf autoremove清理依赖;…

    2026年9月20日 用户投稿
    000
  • 抖音如何查看是否官方认证?主页认证在哪里查看?3分钟学会辨别账号真实性

    在抖音每天涌现的海量新账号中,如何迅速锁定真正值得信赖的官方账号?当你浏览品牌旗舰店、明星主页或权威机构内容时,页面上醒目的蓝色v认证标识正是辨别真伪的关键标志。本文将详细教你识别抖音官方认证账号的操作方法,并深入解读认证账号所具备的四大核心优势。 一、为何要特别关注抖音官方认证? 截至2025年底…

    2026年9月20日
    000
  • 如何在Java中定义一个包含参数的方法

    定义Java带参方法需明确访问修饰符、返回类型、方法名及参数列表。例如:public static int add(int a, int b) { return a + b; },调用时传入对应类型参数,如add(5, 3)输出结果8,参数类型必须匹配,否则编译错误。 在Java中定义一个包含参数的…

    2026年9月20日
    100
  • 超级键盘侠兑换码分享 超级键盘侠最新兑换码大全2025

    超级键盘侠当前可用通用兑换码包括:KB888、HACK2025等,可在游戏中直接兑换黄金键帽皮肤、双倍经验卡及1000声望奖励,数量有限,先兑先得!部分代码还可用于修改器获取额外特权。 无限资源|游戏辅助工具: 2025最新超级键盘侠兑换码汇总如下: KB888:领取稀有黄金键帽外观 HACK202…

    2026年9月20日
    100
  • 怎样在VSCode中比较两个文件的差异?

    VSCode内置文件比较功能可通过命令面板或资源管理器右键菜单启动,操作简便无需插件;2. 使用“Compare Active File With…”或“Select for Compare”后选择文件即可并排查看差异;3. 差异显示中绿色为新增、红色为删除内容,支持逐项浏览与导航,适用…

    2026年9月20日
    000
  • 王者荣耀s41赛季结束时间 王者荣耀s41赛季具体什么时候结束

    王者荣耀s41赛季「天元」于2025年9月25日正式上线,标志着王者荣耀迎来十周年庆典的重要版本。依据过往赛季约三个月的更新周期推算,s41赛季预计将在2026年1月上旬迎来终结,并开启全新赛季。 关于新赛季的结束节点: 根据当前战令系统的持续时间显示,S41赛季将延续至2026年1月。具体结束日期…

    2026年9月20日
    000
  • OSAT、模拟芯片两领域巨头牵手:日月光将收购 ADI 槟城制造工厂

    10 月 23 日讯,全球领先的半导体外包封测服务商日月光与知名模拟芯片制造商 adi(亚德诺)于当地时间 21 日在马来西亚槟城正式宣布达成战略合作,并签署了具备法律效力的谅解备忘录。 根据协议内容,日月光拟收购 ADI 位于马来西亚槟城的制造工厂。该工厂始建于 1994 年,占地面积逾 68 万…

    2026年9月20日
    200
  • 绝境北方兑换码有什么 绝境北方最新2025兑换码分享

    绝境北方最新通用兑换码有:north888、viking2025、ship666等等,可在游戏内商城直接兑换,获得黄金龙头船首像、1000铁与建造速度+15%等丰厚奖励,限时有效先到先得,也可在修改器中享受更多福利。 享受无限物品|游戏作弊器: 绝境北方最新2025兑换码如下: NORTH888:兑…

    2026年9月20日
    500
  • 奥丘树海之下公测礼包码大全-奥丘树海之下公测兑换码最新2025

    奥丘树海之下在9月22日正式上线,玩家们可以领取官方发放的最新兑换码,那么这次都有哪些公测礼包码呢?小编会把最新的公测礼包码都分享在攻略中,各位小伙伴赶紧来小编这里领取。 奥丘树海之下公测礼包码2025 奥丘树海之下 奥丘启动 奥丘论坛福利多 AQAQAQ aoqiu168 kushu666 aq6…

    2026年9月20日
    200
  • 在Java中如何复制集合但保留原始引用

    浅复制是创建新集合并保留原集合对象引用,修改元素会影响原对象。使用构造函数 new ArrayList(original) 或 clone() 实现,两者均不复制对象本身,仅分离集合结构,添加/删除元素互不影响,但对象共享。Collections.copy() 不适用此场景,因需目标集合预先存在且大…

    2026年9月20日
    100
  • 9月中国MPV车型销量排名公布:理想MEGA杀进前十

    9月中国MPV车型销量排名公布:理想MEGA杀进前十9月中国MPV车型销量排名公布:理想MEGA杀进前十9月中国MPV车型销量排名公布:理想MEGA杀进前十9月中国MPV车型销量排名公布:理想MEGA杀进前十

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 根据中汽协最新发布的数据,2025年9月国内MPV市场零售销量录得9.2万辆,同比下滑4.9%。在整体乘用车市场实现6.3%同比增长的背景下,MPV品类表现疲软,未能延续往年“金九”旺季的增长势…

    2026年9月20日 用户投稿
    200
  • 京东pop新店的运营思路是什么?商品如何优化?京东POP新店运营思路与商品优化实战指南

    在京东平台入驻并开设pop店铺的新商家,常常遭遇流量难获取、转化效率低等现实难题。本文将围绕店铺定位、商品打磨、推广布局三大核心方向,全面拆解京东新店从冷启动到稳步增长的运营路径,助力商家高效完成从0到1的跨越。 一、京东POP新店运营关键策略 1. 定位精准化三步法 用户画像构建:借助京东商智进行…

    2026年9月20日
    000
  • mysql中NULL和NOT NULL的区别

    NULL允许字段为空,表示未知或不存在,需用IS NULL判断;2. NOT NULL强制字段必须有值,插入空值会报错;3. NULL影响索引效率,建议关键字段设为NOT NULL并设默认值;4. 根据业务逻辑合理选择,保障数据完整性与查询性能。 在MySQL中,NULL 和 NOT NULL 是用…

    2026年9月20日
    000
  • 主机涨价后的又一大动作:微软拟将Xbox生产移出中国

    正值新一代游戏主机更新周期即将到来之际,有消息称微软正着手推进Xbox主机的生产转移计划。 据《日经亚洲》援引知情人士报道,微软计划在2026年底前将大部分硬件制造产能迁出中国。这一战略调整涵盖Xbox主机产品线,尽管部分零部件的生产可能仍保留在国内。 在此之前,微软已在2025年内两次上调Xbox…

    2026年9月20日
    000
  • 小米汽车9月限时购车权益公布:至高赠送4.9万元权益

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 小米yu7 9月1日,小米汽车官方发布了9月限时购车政策。根据公告,2025年9月1日至30日期间下定任意一款小米汽车,并成功支付5000元定金的用户,均可享受Xiaomi HAD端到端辅助驾驶…

    2026年9月20日
    100

发表回复

登录后才能评论
关注微信