芬兰湾的科特林中支持的泛型有哪些

  介绍

芬兰湾的科特林中支持的泛型有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

例如,泛型类:

类Hello (val值:T)
  
  val盒=Box (1)
  val box1=框(2)

泛型函数:

//Java
  接口Source{
  T nextT ();
  }
  
  空白演示(Sourcestr) {
  Source对象=str;//! ! !在Java中禁止这样的操作//?
  } 

为了解决这个问题,我们不得不将对象类型声明为Source<及# 63;Object>延伸;,其实是毫无意义的,编译器并不理解这一点。

在芬兰湾的科特林中,我们有办法将这种情况告诉编译器。这种技术称为<>强声明处的类型变异(declaration-sitevariance): 我们可以对源的类型参数T添加注解,来确保Source的成员函数只会返回T类型,而绝不会消费T类型。为了实现这个目的,我们可以对T添加了修饰符:

抽象类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的方法。

也可以使用的关键字来投射一个类型。

芬兰湾的科特林中支持的泛型有哪些

			


							
Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5