介绍
芬兰湾的科特林中支持的泛型有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
例如,泛型类:
类Hello(val值:T) val盒=Box (1) val box1=框(2)
泛型函数:
//Java 接口Source{ T nextT (); } 空白演示(Source str) { Source
为了解决这个问题,我们不得不将对象类型声明为Source<及# 63;Object>延伸;,其实是毫无意义的,编译器并不理解这一点。
在芬兰湾的科特林中,我们有办法将这种情况告诉编译器。这种技术称为<>强声明处的类型变异(declaration-sitevariance): 强>我们可以对源的类型参数T添加注解,来确保Source
抽象类Comparable<;{ 摘要乐趣compareTo(其他:T): Int } 有趣的演示(x: Comparable类型的变量 val y: Comparable =x//好吧! }
<>强类型投射投影(类型)强>
类Array(val大小:Int) { 乐趣得到(指数:Int): T {/*……*/} 有趣的设定(指数:Int值:T) {/*……*/} }
这个类对于类型参数T既不能协变,也不能反向协变。这就带来很大的不便。
有趣的副本(来自:Array,: Array ) { 断言(从。大?=to.size) (我在from.indices) 从[我][我]=} val整数:Array =劳动力素质(1、2、3) val任何=Array (3) 副本(int,任何)//错误:期待的参数类型是(Array )
我们需要确保的就是复制()函数不会做这类不安全的操作。我们希望禁止这个函数向从数组
写入数据,我们可以这样声明:
有趣的副本(来自:Array,: Array ) {//? }
这种声明在芬兰湾的科特林中称为类型投射(投影型):我们声明的含义是,从不是一个单纯的数组,而是
一个被限制(投射)的数组:我们只能对这个数组调用那些返回值为类型参数T的方法。
也可以使用的关键字来投射一个类型。
芬兰湾的科特林中支持的泛型有哪些