泛型
定义:在一般的编程模式下,我们需要给任何一个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程,这样编写出来的代码将会拥有更好的扩展性。
泛型有两种定义方式:①泛型类;②泛型方法。定义泛型的方法非常简单,使用的语法都是<T>。
泛型类
现在我们来定义一个泛型类,代码如下所示:
class MyClass<T> { //在class后面添加<T>
fun method(param: T): T {
return param
}
}
//调用方式
val myClass = MyClass<Int>()
val result = myClass.method(123) //结果为123
此时的MyClass类就是一个泛型,MyClass中的方法运行使用T类型的参数和返回值。
这里我们将MyClass类的泛型指定成Int类型,于是method()方法就可以接收一个Int类型的参数,并且它的返回值也变成了Int类型。
泛型方法
下面我们来定义一个泛型方法,代码如下所示:
class MyClass{
fun <T>method(param: T): T {
return param
}
}
//调用方式
val myClass = MyClass()
val result = myClass.method<Int>(123) //结果为123, method后面的泛型定义<Int>可以省略。
你看,现在是在调用method()方法的时候才指定泛型类型了。另外,Kotlin有非常出色的类型推导机制,它能根据你传入的参数,自动推导出泛型的类型。故method后面的泛型指定<Int>可以省略不写。
委托
定义:委托是一种设计模式,操作对象自己不会去处理某段逻辑,而是把工作委托给另外一个辅助对象去处理。
Kotlin对委托功能有很好的支持,并且把委托功能分成了两种:类委托和属性委托。Kotlin中委托使用的关键字是by
。
类委托
类委托的核心思想在于将一个类的具体实现委托给另外一个类去完成。
示例代码如下所示:
/**
* 模拟实现一个Set实现类。
*/
class MySet<T>(private val helperSet: HashSet<T>) : Set<T> by helperSet {
fun add() = println("Hello world")
override fun isEmpty(): Boolean {
return false
}
}
属性委托
属性委托的核心思想是将一个属性的具体实现委托给另一个类去完成。