欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

Kotlin 语法基础大全,从例子着手的 从0到1的学习 -- 特殊类

作者:jcmp      发布时间:2021-04-26      浏览量:0
一、Data ClassData cla

一、Data Class

Data class 可以用于创建一个数据类用于存储数据。这些类将会自动提供类似 setter , getter , copy , toString() , hashCode() , componentN() 方法。

data class User(val name: String, val id: Int) // 1fun main() { val user = User("Alex", 1) println(user) // 2 val secondUser = User("Alex", 1) val thirdUser = User("Max", 2) println("user == secondUser: ${user == secondUser}") // 3 println("user == thirdUser: ${user == thirdUser}") println(user.hashCode()) println(secondUser.hashCode()) // 4 println(thirdUser.hashCode()) // copy() function println(user.copy()) // 5 println(user.copy("Max")) // 6 println(user.copy(id = 2)) // 7 println("name = ${user.component1()}") // 8 println("id = ${user.component2()}")}/*User(name=Alex, id=1)user == secondUser: trueuser == thirdUser: false63347075633470752390846User(name=Alex, id=1)User(name=Max, id=1)User(name=Alex, id=2)name = Alexid = 1*/

二、Enum class 枚举

枚举类 等同于java中地枚举

enum class State { IDLE, RUNNING, FINISHED // 1}fun main() { val state = State.RUNNING // 2 val message = when (state) { // 3 State.IDLE -> "It's idle" State.RUNNING -> "It's running" State.FINISHED -> "It's finished" } println(message)}

枚举类,也可以像Java 那样在类里面定义方法字段等。这种情况你需要明确的使用分号来分割 枚举的实例和类里的其他要素。

enum class Color(val rgb: Int) { // 1 RED(0xFF0000), // 2 GREEN(0x00FF00), BLUE(0x0000FF), YELLOW(0xFFFF00); fun containsRed() = (this.rgb and 0xFF0000 != 0) // 3}fun main() { val red = Color.RED println(red) // 4 println(red.containsRed()) // 5 println(Color.BLUE.containsRed()) // 6}

三、密封类 Sealed Classes

密封类 密封类用于限制继承。如果你定义了一个密封类,那么他的子类必须定义在同一个文件中。不允许子类定义在别的文件中,

sealed class Mammal(val name: String) // 1class Cat(val catName: String) : Mammal(catName) // 2class Human(val humanName: String, val job: String) : Mammal(humanName)fun greetMammal(mammal: Mammal): String { when (mammal) { // 3 is Human -> return "Hello ${mammal.name}; You're working as a ${mammal.job}" // 4 is Cat -> return "Hello ${mammal.name}" //5 is Mammal -> return "Hello ${mammal.name}" } //6}fun main() { println(greetMammal(Cat("Snowy"))) println(greetMammal(Human("John", "IT"))) //println(greetMammal(Mammal("John"))) // 7}/*Hello SnowyHello John; You're working as a IT*/

四、Object Keyword

类和对象在kotlin中和别的面向对象的语言中大同小异:class 是一个蓝图,object 是类的一个实例。通常来说,你定义了一个类,然后创建多个类的实例。

import java.util.Randomclass LuckDispatcher { //1 fun getNumber() { //2 var objRandom = Random() println(objRandom.nextInt(90)) }}fun main() { val d1 = LuckDispatcher() //3 val d2 = LuckDispatcher() d1.getNumber() //4 d2.getNumber()}

在kotlin中中你有这么一个定义 object keyword 。这常常被用来定义 一个唯一的实现。这在Java中,你可以理解为单例模式:当有两个线程想要创建这个类的实例的时候,能保证只有同时只有一个实例。

五、object Expression

这是一个 object Expression 基础的用法,:一个简单的object或者数据的结构体。在这里你不需要定义一个类的申明:你只需要创建一个object然后申明他的成员,并且在一个方法中去使用他。想这样的对象,在Java中会以匿名内部类的实例存在。

fun rentPrice(standardDays: Int, festivityDays: Int, specialDays: Int): Unit { //1 val dayRates = object { //2 var standard: Int = 30 * standardDays var festivity: Int = 50 * festivityDays var special: Int = 100 * specialDays } val total = dayRates.standard + dayRates.festivity + dayRates.special //3 print("Total price: $$total") //4}fun main() { rentPrice(10, 2, 1) //5}

六、object Declaration

你也可以用 object 申明,这不是一个表达式,不能用于赋值语句,你最好通过类名直接访问他的成员。

object DoAuth { //1 fun takeParams(username: String, password: String) { //2 println("input Auth parameters = $username:$password") }}fun main(){ DoAuth.takeParams("foo", "qwerty") //3}

Companion Objects内部object

申明在类的内部的另一种object的用法是 Companion Objects。从语法上来讲,这更像是java中的静态方法。如果你想在kotlin中使用Companion Object。请使用包级别的类方法定义。

class BigBen { //1 companion object Bonger { //2 fun getBongs(nTimes: Int) { //3 for (i in 1 .. nTimes) { print("BONG ") } } }}fun main() { BigBen.getBongs(12) //4}