当前位置: 首页 > news >正文

网站建设sem怎么做抖音seo代理

网站建设sem怎么做,抖音seo代理,推广普通话周是每年9月的第几周,西塞山区建设局网站一、泛型 1.泛型类的创建与实例化 kotlin中泛型类的创建与实例化与Java中相似&#xff1a; class A<T>(t:T){var valuet }fun main() {var a:A<Int> A<Int>(11) }Kotlin中存在类型推断&#xff0c;所以创建实例可以写成&#xff1a; var aA(11)2.泛型约束…

一、泛型

1.泛型类的创建与实例化

kotlin中泛型类的创建与实例化与Java中相似:

class A<T>(t:T){var value=t
}fun main() {var a:A<Int> =A<Int>(11)
}

Kotlin中存在类型推断,所以创建实例可以写成:

	var a=A(11)

2.泛型约束

我们可以使用泛型约束来设定一个给定参数允许使用的类型。

Kotlin 中使用 : 对泛型的类型上限进行约束。

最常见的约束是上界(upper bound):

fun <T : Comparable<T>> sort(list: List<T>) {// ……
}

Comparable 的子类型可以替代 T。 例如:

sort(listOf(1, 2, 3)) // OK。Int 是 Comparable<Int> 的子类型
sort(listOf(HashMap<Int, String>())) // 错误:HashMap<Int, String> 不是 Comparable<HashMap<Int, String>> 的子类型

对于多个上界约束条件,可以用 where 子句:

fun <T> copyWhenGreater(list: List<T>, threshold: T): List<String>where T : CharSequence,T : Comparable<T> {return list.filter { it > threshold }.map { it.toString() }
}

3.声明处型变

声明处型变可以使用in(生产者使用)和out
(消费者使用)修饰符。
in可以使类型参数逆变,只能用作输入,也就是可以作为入参的类型但是无法作为返回值的类型。

class A<in T>(t:T){fun f(t: T){}
}
fun main() {val a=A<Int>(111)a.f(11)
}

out使得一个类型参数协变,只能用作输出,可以作为返回值类型但是无法作为入参的类型:

// 定义一个支持协变的类
class Runoob<out A>(val a: A) {fun foo(): A {return a}
}fun main(args: Array<String>) {var strCo: Runoob<String> = Runoob("a")var anyCo: Runoob<Any> = Runoob<Any>("b")anyCo = strCoprintln(anyCo.foo())   // 输出 a
}

4.类型擦除

Kotlin 为泛型声明用法执行的类型安全检测仅在编译期进行。 运行时泛型类型的实例不保留关于其类型实参的任何信息。 其类型信息称为被擦除。例如,Foo 与 Foo<Baz?> 的实例都会被擦除为 Foo<*>。

因此,并没有通用的方法在运行时检测一个泛型类型的实例是否通过指定类型参数所创建 ,并且编译器禁止这种 is 检测。

类型转换为带有具体类型参数的泛型类型,如 foo as List 无法在运行时检测。 当高级程序逻辑隐含了类型转换的类型安全而无法直接通过编译器推断时, 可以使用这种非受检类型转换。编译器会对非受检类型转换发出警告,并且在运行时只对非泛型部分检测(相当于 foo as List<*>)。

泛型函数调用的类型参数也同样只在编译期检测。在函数体内部, 类型参数不能用于类型检测,并且类型转换为类型参数(foo as T)也是非受检的。然而, 内联函数的具体化的类型参数会由调用处内联函数体中的类型实参所代入,因此可以用于类型检测与转换, 与上述泛型类型的实例具有相同限制。

5.星号投影

有些时候, 你可能想表示你并不知道类型参数的任何信息, 但是仍然希望能够安全地使用它. 这里所谓"安全地使用"是指, 对泛型类型定义一个类型投射, 要求这个泛型类型的所有的实体实例, 都是这个投射的子类型。

对于这个问题, Kotlin 提供了一种语法, 称为 星号投射(star-projection):

  1. 假如类型定义为 Foo , 其中 T 是一个协变的类型参数, 上界(upper bound)为 TUpper ,Foo<> 等价于 Foo . 它表示, 当 T 未知时, 你可以安全地从 Foo<> 中 读取TUpper 类型的值.
  2. 假如类型定义为 Foo , 其中 T 是一个反向协变的类型参数, Foo<> 等价于 Foo . 它表示, 当 T 未知时, 你不能安全地向 Foo<> 写入 任何东西.
  3. 假如类型定义为 Foo , 其中 T 是一个协变的类型参数, 上界(upper bound)为 TUpper , 对于读取值的场合, Foo<*> 等价于 Foo , 对于写入值的场合, 等价于 Foo .

上一篇:Kotlin新手教程七(委托)

http://www.zhongyajixie.com/news/40435.html

相关文章:

  • 动易网站中添加邮箱51外链代发网
  • 做1个响应式设计网站好东莞seo报价
  • 专业开发网站建设抖音seo排名优化公司
  • 珠海专业网站制作公司百度新闻网站
  • 网站建设柒金手指花总14聚名网域名注册
  • 彩票网站 模块郑州seo代理外包公司
  • 毕设做网站答辩稿网站推广的基本手段有哪些
  • 怎么做网站备案连接微信朋友圈产品推广语
  • 企业网站 空间外贸网站制作公司
  • 南昌做兼职的网站设计百度提交网站入口
  • 网站飘窗怎样做如何做seo搜索优化
  • 成都住房和城乡建设厅网站企业seo如何优化
  • html5制作的网站百度 竞价排名
  • 网站建设网站免费口碑营销有哪些
  • pc网站做移动端适配整站优化要多少钱
  • 表白网站制作平台google浏览器官方下载
  • 企业网站制作方法电商怎么推广自己的产品
  • 安徽淮南市城乡建设委员会门户网站淘宝数据查询
  • 费用网站建设数据分析师资格证书怎么考
  • 建站之家官网公司网站怎么弄
  • 个人工作室网站怎么做优化大师会员兑换码
  • 个人放款可以做网站产品网络营销
  • 有没有建筑学做区位分析的网站seo网站排名软件
  • 做网站还有希望吗推销
  • 上海 宝安网站建设 网络服务百度seo公司一路火
  • 网站怎么办商城推广
  • 虎门外贸网站建设怎么做小说推广挣钱
  • 微信网站设计站长工具seo综合查询官网
  • 网站log日志聚名网官网
  • 做网站虚拟主机是什么意思铜陵seo