Android开发学习之路--Kotlin之类及对象

前言

1 类和继承

1.1 类

class MyClass {
}

1.2 构造函数

一个主构造函数以及多个二级构造函数

class Person constructor(firstName: String) {
}
//也可以省略constructor,写成:
class Person(firstName: String) {
}

在@Inject的时候不能省略constructor

class Person @Inject constructor(firstName: String) {
}

初始化代码可以放在以init做前缀的初始化块内

class Person(firstName: String) {
    init {
        Log.d("Person", Person initialized with name ${name}")
    }
}

声明属性并在主构造函数中初始化:

class Person(val firstName: String, val lastName: String, var age: Int) {
}

1.3 继承

所有的类都有共同的父类 Any. 声明一个明确的父类,需要在类头后加冒号再加父类:

open class Base(p: Int)
class Derived(p: Int) : Base(p)

kotlin中所有的类都是final, 允许别的类继承这个类需使用open或者abstract关键字

1.4 抽象类

抽象类或函数默认是带着的open注解的

open class Base {
    open fun f() {}
}
abstract class Derived : Base() {
    override abstract fun f()
}

1.5 伴随对象

类似java的静态方法调用

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

1.6 内部类

类可以标记为 inner 这样就可以访问外部类的成员.内部类拥有外部类的一个对象
引用

class Outer {
    private val bar: Int = 1
    inner class Inner {
        fun foo() = bar
    }
}
val demo = Outer().Inner().foo() //==1

1.7 匿名内部类

tv_hello.setOnClickListener(object: View.OnClickListener{
    override fun onClick(v: View?) {

    }
})
//或者lambda表达式
tv_hello.setOnClickListener{}

1.8 嵌套类

类可以嵌套在其他类中

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}

1.9 延迟初始化属性

属性加上 lateinit 修饰符

laterinit var name: String

1.10 模块

internal 修饰符是指成员的可见性是只在同一个模块中才可见的

2 扩展(extension)

2.1 函数扩展

fun MutableList<Int>.swap(x: Int, y: Int) {
    val temp = this[x] // this 对应 list
    this[x] = this[y]
    this[y] = tmp
}

常见的扩展比如toast,可以扩展Context类

fun Context.toast(message: String, length: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, length)
}

2.2 属性扩展

扩展属性,获取list中的最后一个index

val <T> List<T>.lastIndex: Int
    get() = size-1

3 数据类

我们经常创建一个只保存数据的类, 用 data 标注

data class User(val name: String, val age: Int)

如果数据类有无参构造函数,需将主构造函数中,将成员属性初始化。

data class User(val name: String = "", val age: Int = 0)

4 泛型

4.1 泛型类

和Java类似,这里的T就是泛型的对象,声明一个泛型类

class Box<T>(t: T){
    var value = t
}

创建实例

val box: Box<Int> = Box<Int>(1)

4.2 泛型函数

声明一个泛型函数,T表示类型,这里处理了Int,String和其他

fun <T> print(content: T) {
     when (content) {
         is Int -> println(content)
         is String -> printlin(content)
         else -> println("unkown type")
     }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值