当前位置: 首页 > news >正文

Android学习(六)-Kotlin编程语言-数据类与单例类

假设我们要创建一个表示书籍的数据类 Book,包含书名和作者两个字段。在 Java 中,代码如下:

public class Book { String title; String author; public Book(String title, String author) { this.title = title; this.author = author; } @Override public boolean equals(Object obj) { if (obj instanceof Book) { Book other = (Book) obj; return other.title.equals(title) && other.author.equals(author); } return false; } @Override public int hashCode() {return title.hashCode() + author.hashCode(); } @Override public String toString() { return "Book(title=" + title + ", author=" + author + ")"; } 
}

这段代码虽然实现了所需的功能,但显得相当冗长且缺乏实际逻辑意义。

Kotlin 中的数据类

在 Kotlin 中,我们可以使用 data 关键字来简化这个过程。首先,右击 com.example.helloworld 包 → New → Kotlin File/Class,在弹出的对话框中输入 Book,选择类型为“Class”。然后编写如下代码:

data class Book(val title: String, val author: String)

只需一行代码即可完成数据类的定义!Kotlin 会自动为我们生成 equals()hashCode()toString() 方法。

测试数据类

我们可以在 main 函数中测试这个数据类:

fun main() { val book1 = Book("1984", "George Orwell") val book2 = Book("1984", "George Orwell") println(book1) println("book1 equals book2: ${book1 == book2}")
}

运行上述代码,输出结果如下:

Book(title=1984, author=George Orwell)
book1 equals book2: true

可以看到,Book 数据类已经正常工作了。如果去掉 data 关键字,结果将会完全不同。

单例类

单例模式是一种设计模式,确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点。在 Java 中,实现单例模式通常需要私有化构造函数并提供一个静态方法来获取实例。

Java 中的单例模式

以下是一个典型的 Java 单例模式实现:

public class Library { private static Library instance; private Library() {} public synchronized static Library getInstance() { if (instance == null) {instance = new Library(); } return instance; } public void libraryTest() { System.out.println("libraryTest is called."); } 
}

调用单例类中的方法:

Library library = Library.getInstance(); 
library.libraryTest();

尽管 Java 中的单例模式实现并不复杂,但 Kotlin 提供了更简洁的方式。

Kotlin 中的单例模式

在 Kotlin 中,创建单例类非常简单,只需将 class 关键字改为 object 关键字即可。右击 com.example.helloworld 包 → New → Kotlin File/Class,在弹出的对话框中输入 Library,选择类型为“Object”,点击“OK”完成创建。初始代码如下所示:

object Library { fun libraryTest() { println("libraryTest is called.") } 
}

这样,Library 就已经是一个单例类了。调用单例类中的方法也非常简单:

fun main() {Library.libraryTest()
}

运行上述代码,输出结果如下:

libraryTest is called.

在 Kotlin 中,不需要私有化构造函数,也不需要提供 getInstance() 方法,只需将 class 改为 object,Kotlin 会自动处理单例的创建和管理。

总结

通过本节的学习,我们掌握了 Kotlin 中数据类和单例类的使用方法。数据类通过 data 关键字简化了常见方法的实现,而单例类通过 object 关键字提供了简洁的单例模式实现。这些特性使得 Kotlin 在面向对象编程方面更加高效和易于维护。


通过这些示例和解释,相信你已经对 Kotlin 中的数据类和单例类有了清晰的认识。实践是检验真理的唯一标准,动手试试吧!


 

http://www.lryc.cn/news/508187.html

相关文章:

  • CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
  • 力扣274. H 指数
  • 挑战一个月基本掌握C++(第五天)了解运算符,循环,判断
  • Python的sklearn中的RandomForestRegressor使用详解
  • ReactPress 1.6.0:重塑博客体验,引领内容创新
  • 人脸生成3d模型 Era3D
  • kubeadm搭建k8s集群
  • centOS系统进程管理基础知识
  • STM32中ADC模数转换器
  • 初学stm32 --- 外部中断
  • wordpress调用指定分类ID下 相同标签的内容
  • SQL语法基础知识总结
  • css 实现呼吸灯效果
  • IMX6ULL开发板如何关掉自带的QT的GUI界面和poky的界面的方法
  • 几种广泛使用的 C++ 编译器
  • 《Vue进阶教程》第十六课:深入完善响应式系统之单例模式
  • C语言版解法力扣题:将整数按权重排序
  • Unity ECS和OOP优劣对比
  • 【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?
  • 解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹
  • Flutter组件————Container
  • Java重要面试名词整理(二):SpringMyBatis
  • Excel生成DBC脚本源文件
  • Git进阶:本地或远程仓库如何回滚到之前的某个commit
  • linux 中文输入法设置的宏观思路 (****)
  • 271-基于XC7V690T的12路光纤PCIe接口卡
  • Semaphore UI安装和实践
  • Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)
  • Docker Compose 安装 Harbor
  • 使用docker compose安装gitlab