博客
关于我
《Kotlin极简教程》第五章 Kotlin面向对象编程(OOP)
阅读量:274 次
发布时间:2019-03-01

本文共 5264 字,大约阅读时间需要 17 分钟。

Kotlin 教程:从基础到进阶

1. OOP 版本的 HelloWorld

Kotlin 中的 HelloWorld 示例,展示了类和成员函数的基本使用方法。

class Greeter(val name: String) {    fun greet() {        println("Hello, $name")    }}fun main(args: Array
) { Greeter(args[0]).greet()}

2. 构造函数传参

通过分解对应式声明,简洁地创建多个变量。

fun main(args: Array
) { val pair = Pair(1, "one") val (num, name) = pair println("num = $num, name = $name") val triple = Triple(10, "B", 10.0) val (a, b, c) = triple println("a=$a, b=$b, c=$c")}data class Pair
( val first: K, val second: V) { operator fun component1(): K = first operator fun component2(): V = second}data class Triple
( val first: K, val second: V, val third: T) { operator fun component1(): K = first operator fun component2(): V = second operator fun component3(): T = third}

3. 数据类

数据类自动推导标准功能,适合仅用于存储数据的类。

data class User(    val name: String,    val id: Int) {    override fun toString(): String {        return "User(name=$name, id=$id)"    }}fun getUser(): User {    return User("Alex", 1)}fun main(args: Array
) { val user = getUser() println("name = ${user.name}, id = ${user.id}")}

4. 接口与实现

定义接口并实现其方法,保证代码的可扩展性。

interface Clickable {    fun click()}class Button : Clickable {    override fun click() {        println("I was clicked")    }}fun main(args: Array
) { Button().click()}

5. POJO Bean

创建实体类,包含必要的字段和 getter/setter 方法。

package jason.chen.mini_springboot.restful.entityimport java.util.*import javax.persistence.*@Entityclass Customer(    val firstName: String,    val lastName: String,    val gmtCreated: Date,    val gmtModified: Date,    val isDeleted: Int,    val deletedDate: Date,    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    val id: Long = -1) {    override fun toString(): String {        return "Customer(firstName=$firstName, lastName=$lastName, gmtCreated=$gmtCreated, gmtModified=$gmtModified, isDeleted=$isDeleted, deletedDate=$deletedDate, id=$id)"    }}data class Shop(    val name: String,    val customers: List
)data class Customer( val name: String, val city: City, val orders: List
) { override fun toString(): String { return "$name from ${city.name}" }}data class Order( val products: List
, val isDelivered: Boolean)data class Product( val name: String, val price: Double) { override fun toString(): String { return "'$name' for $price" }}data class City( val name: String) { override fun toString(): String { return name }}

6. 定一个 Rectangle 对象

创建一个矩形对象,包含高度和宽度属性。

package geometry.shapesclass Rectangle(    val height: Int,    val width: Int) {    val isSquare: Boolean        get() = height == width    fun createRandomRectangle(): Rectangle {        val random = Random()        return Rectangle(            random.nextInt(),            random.nextInt()        )    }}

7. 封装日期工具类

创建一个日期工具类,提供丰富的日期操作功能。

package jason.chen.mini_springboot.restful.utilsimport java.text.SimpleDateFormatimport java.util.*enum class DateOptUnit {    YEAR, MONTH, DATE}data class DateOperator(    val unit: DateOptUnit,    val value: Int)fun Any.year(value: Int): DateOperator {    return DateOperator(DateOptUnit.YEAR, value)}fun Any.month(value: Int): DateOperator {    return DateOperator(DateOptUnit.MONTH, value)}fun Any.day(value: Int): DateOperator {    return DateOperator(DateOptUnit.DATE, value)}operator fun Date.plus(nextVal: Int): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.add(Calendar.DATE, nextVal)    return calendar.time}operator fun Date.minus(nextVal: Int): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.add(Calendar.DATE, nextVal * -1)    return calendar.time}operator fun Date.plus(nextVal: DateOperator): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.add(        nextVal.unit.parseType(),        nextVal.value    )    return calendar.time}operator fun Date.minus(nextVal: DateOperator): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.add(        nextVal.unit.parseType(),        nextVal.value * -1    )    return calendar.time}operator fun Date.inc(): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.add(Calendar.MONTH, 1)    calendar.set(Calendar.DAY_OF_MONTH, 0)    return calendar.time}operator fun Date.dec(): Date {    val calendar = GregorianCalendar()    calendar.time = this    calendar.set(Calendar.DAY_OF_MONTH, 1)    return calendar.time}operator fun Date.get(position: Int): Int {    val calendar = GregorianCalendar()    calendar.time = this    var value = 0    when (position) {        0 -> value = calendar.get(Calendar.YEAR)        1 -> value = calendar.get(Calendar.MONTH) + 1        2 -> value = calendar.get(Calendar.DAY_OF_MONTH)        3 -> value = calendar.get(Calendar.HOUR)        4 -> value = calendar.get(Calendar.MINUTE)        5 -> value = calendar.get(Calendar.SECOND)    }    return value}operator fun Date.compareTo(compareDate: Date): Int {    return (time - compareDate.time).toInt()}fun Date.stringFormat(formatType: String): String {    return SimpleDateFormat(formatType).format(this)}

转载地址:http://abea.baihongyu.com/

你可能感兴趣的文章
Objective-C实现粒子群算法(附完整源码)
查看>>
Objective-C实现精准计时(附完整源码)
查看>>
Objective-C实现系统时间戳(附完整源码)
查看>>
Objective-C实现累加校验和(附完整源码)
查看>>
Objective-C实现红黑树算法(附完整源码)
查看>>
Objective-C实现约分(化简比)(附完整源码)
查看>>
Objective-C实现约瑟夫环算法(附完整源码)
查看>>
Objective-C实现线性反馈移位寄存器LFSR(附完整源码)
查看>>
Objective-C实现线性查找算法(附完整源码)
查看>>
Objective-C实现线程池(附完整源码)
查看>>
Objective-C实现组合模式(附完整源码)
查看>>
Objective-C实现绘制跳动的桃心(附完整源码)
查看>>
Objective-C实现给定一个 NxN 网格,找出单元格 [0, 0] 中的老鼠是否可以到达单元格 [N-1, N-1] 中的目标算法(附完整源码)
查看>>
Objective-C实现给定一个句子,返回出现次数最多的单词算法(附完整源码)
查看>>
Objective-C实现给定一个数字数组,返回最大乘积数组中的 3 个数字算法(附完整源码)
查看>>
Objective-C实现给定一个整数 n,将最小步数返回到 1算法(附完整源码)
查看>>
Objective-C实现给定一串字符,返回出现频率最高的字符算法(附完整源码)
查看>>
Objective-C实现给定两个数字 n 和 k,使 k 数字的所有唯一组合从 1 到 n 并按排序顺序算法(附完整源码)
查看>>
Objective-C实现给定两个长度相同的字符串s1和s2,如果s2是s1的乱序字符串则返回真,否则返回假算法(附完整源码)
查看>>
Objective-C实现给定分隔符加入字符串列表算法(附完整源码)
查看>>