gpt4 book ai didi

kotlin - T 和 T 和有什么不一样?在 Kotlin ?

转载 作者:行者123 更新时间:2023-12-02 11:54:10 24 4
gpt4 key购买 nike

有什么区别:

fun <T, R> List<T>.map1(transform: (T) -> R): List<R> {
return this.map(transform)
}
fun <T, R> List<T>.map2(transform: (T?) -> R): List<R> {
return this.map(transform)
}
fun <T, R> List<T?>.map3(transform: (T?) -> R): List<R> {
return this.map(transform)
}
在我的测试中, null接受 以上所有 3 个变换函数 ,所以: T 之间有什么区别吗?和 T? ?

最佳答案

在您的示例中,TT?是等价的,但还有其他情况下 ?确实有所作为。
当你声明一个类型参数时 <T> ,它没有任何限制。和写一样<T: Any?> , 意思是 T将允许 Any? 的任何子类型.添加 ?它将使它可以为空,但是 Any?已经可以为空,所以 ?不会改变任何东西。这意味着 允许的类型集无界类型 TT? 允许的类型集相同.
一旦你限制什么T可以,但事情会发生变化。例如,在下面的函数中,我们声明了一个类型参数 <T: Any> ,限制它使其不再可以为空。

fun <T: Any> myFunction(item: T) // item can't be null
这意味着我不能通过 nullmyFunction .我只能用 null 调用该函数如果我将参数的类型更改为 T? .
fun <T: Any> myFunction(item: T?) // item can be null

请注意 ?只是注释一个现有的类型参数。使用 ? 声明类型参数没有任何意义并且不编译。例如, fun <T?> myFunction(item: T)不是有效的 Kotlin 代码。

关于kotlin - T 和 T 和有什么不一样?在 Kotlin ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63755329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com