CODE函数-英雄云拓展知识分享
141
2023-10-25
【摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第4节,由薛岗编著。
1.4 泛型、对象表达式和代理
1.4.1 泛型
泛型是类型参数化的一种实现方式。基于泛型技术可使用相同的程序来实现对不同类型的参 数进行处理或计算。泛型在使用时需要加注符号:◇,并在符号内设置泛型参数(一般使用大写 英文字母来表示),例如: T。Kotlin 语言可在定义类时使用泛型,下列示例程序展示了泛型的基 本使用方法:
1 class SimpleClass2 var value = v //value的类型与v 的类型一致,而v 的类型可被动态指定 3 }
fun main(args: Array8 1println(n.value)
9 println(p.value)
10 }
上述程序中,T 为一个泛型。程序运行时, SimpleClass类中的value类型会根据T 类型的变 化而变化。例如,程序第6行将T 设置为Int类型,程序第8行所运行的结果为整型;而程序第7 行将T 设置成Float类型,程序第9行所运行的结果为小数。
Kotlin 泛型在声明时可使用关键字 out和 in。当定义类的泛型声明中使用了关键字 out,则带 有指定类型的对象可赋值给带有该指定类型的父类型的变量或常量。例如, SimpleClass1 open class Su{
var v: String ="cls"
3 }
4 class Super:Su()
5 class SimpleClass6 al value: T = v
7 }
8 fun main(args: Array9 val s = Super()
10 val c1 = SimpleClass13 println(c2.value.v)
14 println(c3.value) 15 }
上述程序中,SimpleClass类的泛型声明中使用了out,则 c1(SimpleClass类似,当定义类的泛型声明中使用了关键字in,则带有指定类型的对象可直接赋值给带有该 指定类型的子类型的变量或常量。例如,在下列程序中,因为泛型声明中使用 in,所以 Super类 型可被当作Su 类型来使用:
1 open class Su
2 (class Super: Su()
3
4 class SimpleClass5 var value="value"
fun func(v: T):Unit{
value = v.toString()
}
10 fun main(args: Array12 val s u(
13 c.func(s)
14 println(c.value) 15 }
1.4.2 基于泛型声明方法和泛型限制
Kotlin 还可在方法定义时进行泛型声明,基本形式有以下两种:
fun}
例如,可以基于泛型定义相应的方法,并在不同情况下使用这些方法:
funreturn v
3 }
4
funreturn "string"
7 )
8
9 fun main(args: Array10 prin u(10)
11 println(func(12.34f))
12 println(Int.funct())
13 print1n(Double.funct()) 14
上述程序中, func 和 funct 都是基于泛型技术定义的方法,而且,它们可以针对不同的数据
类型完成相应的工作 。
泛型在使用时可指定相关类型的上界,基本的语法为
指 定 多 个 类 型 上 界 时 使 用 关 键 字 where, 例 如 :
funwhere T:类型1, T:类型2{
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~