Kotlin编程之泛型

来源:互联网 发布:阮一峰博客 js面向对象 编辑:程序博客网 时间:2024/05/20 18:40

Kotlin编程相关知识点介绍

  • Kotlin编程之使用Intellij IED和了解源文件(.kt)
  • Kotlin编程之类的介绍和使用
  • Kotlin编程之类的属性
  • Kotlin编程之方法
  • Kotlin编程之父类和继承父类
  • Kotlin编程之接口和实现接口
  • Kotlin编程之伴生对象,抽象类,密封类
  • Kotlin编程之嵌套类,内部类,匿名内部类
  • Kotlin编程之对象的表达式和声明
  • Kotlin编程之扩展方法
  • Kotlin编程之扩展属性和扩展伴生对象

泛型


在Kotlin编程中,支持泛型

package com.xingen.kotlin.day2017528fun main(args: Array<String>) {    var instance=Test<String>("定义一个泛型类")    instance.test()    //当可以推断出泛型中的类型,例如:从构造函数的参数等,可以省略指定参数类型。    Test(1).test()}/** * 定义一个泛型类,和泛型属性 */class Test<T>(var t:T) {    fun  test(){        println(t)    }}

输出结果:

定义一个泛型类1

可知:

  • 当可以推断出泛型中的类型,例如:从构造函数的参数等,可以省略指定参数类型

泛型的注意点


在java编程中类型系统最棘手的一部分是通配符类型。但是,在Kotlin编程中,是没有通配符,采用声明变化和类型投影来替代。

通配符的作用: 使用界限通配符增加API的灵活性。

在Java编程中一个常见的问题:

List<String> strs = new ArrayList<String>();List<Object> objs = strs; // !!! 这里会导致一个问题,在Java中是禁止这样做的objs.add(1); //将integer类型的数据添加到String 类型的列表中String s = strs.get(0); // !!! ClassCastException异常 : Integer类型不能转成String

在Kotlin编程中:

一旦声明类型后,不能加入其它的类型数据,如下图所示。

这里写图片描述