ad

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.4.1 泛型

admin 141 2023-10-25

【摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第4节,由薛岗编著。

1.4 泛型、对象表达式和代理

1.4.1 泛型

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.4.1 泛型

泛型是类型参数化的一种实现方式。基于泛型技术可使用相同的程序来实现对不同类型的参 数进行处理或计算。泛型在使用时需要加注符号:◇,并在符号内设置泛型参数(一般使用大写 英文字母来表示),例如: T。Kotlin 语言可在定义类时使用泛型,下列示例程序展示了泛型的基 本使用方法:

1 class SimpleClass(v:T){

2 var value = v //value的类型与v 的类型一致,而v 的类型可被动态指定 3 }

fun main(args: Array){6 val n = SimpleClass(10)val p = SimpleClass(12.23f)

8 1println(n.value)

9 println(p.value)

10 }

上述程序中,T 为一个泛型。程序运行时, SimpleClass类中的value类型会根据T 类型的变 化而变化。例如,程序第6行将T 设置为Int类型,程序第8行所运行的结果为整型;而程序第7 行将T 设置成Float类型,程序第9行所运行的结果为小数。

Kotlin 泛型在声明时可使用关键字 out和 in。当定义类的泛型声明中使用了关键字 out,则带 有指定类型的对象可赋值给带有该指定类型的父类型的变量或常量。例如, SimpleClass声 明中使用了 out, 则在后续程序中, SimpleClass对象可赋值给 SimpleClass变量或常量。下列示例程序说明了out的使用方法:

1 open class Su{

var v: String ="cls"

3 }

4 class Super:Su()

5 class SimpleClass(v: T){

6 al value: T = v

7 }

8 fun main(args: Array)(

9 val s = Super()

10 val c1 = SimpleClass(s)11 val c2:SimpleClass= c112 val c3: SimpleClass= c2

13 println(c2.value.v)

14 println(c3.value) 15 }

上述程序中,SimpleClass类的泛型声明中使用了out,则 c1(SimpleClass对象)可赋 值给c2(SimpleClass常量),这是由于Su 是Super的父类;另外,c2(SimpleClass对象) 可赋值给c3(SimpleClass常量),这是因为Any 是Kotlin所有类的父类。

类似,当定义类的泛型声明中使用了关键字in,则带有指定类型的对象可直接赋值给带有该 指定类型的子类型的变量或常量。例如,在下列程序中,因为泛型声明中使用 in,所以 Super类 型可被当作Su 类型来使用:

1 open class Su

2 (class Super: Su()

3

4 class SimpleClass{

5 var value="value"

fun func(v: T):Unit{

value = v.toString()

}

10 fun main(args: Array){11 var c = SimpleClass()

12 val s u(

13 c.func(s)

14 println(c.value) 15 }

1.4.2 基于泛型声明方法和泛型限制

Kotlin 还可在方法定义时进行泛型声明,基本形式有以下两种:

fun 方法名(v:T,…):… {// 具有泛型声明的方法fun T.方法名( … ): … {//基于泛型的方法声明

}

例如,可以基于泛型定义相应的方法,并在不同情况下使用这些方法:

fun func(v:T):T{//本方法可对不同的类型数据进行处理

return v

3 }

4

fun T.funct():String{//本方法可在不同的类中进行工作

return "string"

7 )

8

9 fun main(args: Array){

10 prin u(10)

11 println(func(12.34f))

12 println(Int.funct())

13 print1n(Double.funct()) 14

上述程序中, func 和 funct 都是基于泛型技术定义的方法,而且,它们可以针对不同的数据

类型完成相应的工作 。

泛型在使用时可指定相关类型的上界,基本的语法为。当需要为泛型变量

指 定 多 个 类 型 上 界 时 使 用 关 键 字 where, 例 如 :

fun 方法名称(参数列表):返回值类型

where T:类型1, T:类型2{

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_3.3 基于 Intent 对象启动运行环境中
下一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_2.3.1 配置主窗体的布局文件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×