gpt4 book ai didi

kotlin - 关于Kotlin中泛型的类型参数

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

我正在研究Kotlin语言,无法区分这些示例,尤其是泛型的“where”子句中的可空类型。
你能告诉我区别吗?

情况1

class Foo<T> where T: Comparable<T>
class Foo<T> where T: Comparable<T?>
class Foo<T> where T: Comparable<T>?
class Foo<T> where T: Comparable<T?>?

情况2
class Foo<T> where T: Comparable<T>? {
// If a class is declared like above, is a type 'T' already nullable?

// Then,
fun bar(value: T?) { // Should I declare a member function like this to accept null or
// do something
}

fun bar(value: T) { // Should I declare like this instead?
}
}

最佳答案

首先,要区分T : Comparable<T>T : Comparable<T?>,请看以下示例。区别在于您是否可以比较TT?

class Bar1(var bar : Int) : Comparable<Bar1>{

override fun compareTo(other : Bar1) : Int {
return bar - other.bar
}
}

class Bar2(var bar : Int) : Comparable<Bar2?>{

override fun compareTo(other : Bar2?) : Int {
return bar - ( other?.bar ?: 0 )
}
}

fun main(){
println(Bar1(1) > Bar1(2))
val bar2 : Bar2? = Bar2(2)
println(Bar2(1) > bar2)
}

输出:

false

false



区别在于
val bar1 : Bar1? = Bar1(2)
println(Bar1(1) > bar1)

将无法编译。 bar1必须解开

其次,要区分 class Foo<T> where T: Comparable<T>?class Foo<T> where T: Comparable<T>?,它与可比性无关。看下面的简化示例。
class Foo1<T>(val t : T) where T : Int{
override fun toString() : String{
return "$t"
}
}

class Foo2<T>(val t : T) where T : Int?{
override fun toString() : String{
return "$t"
}
}


fun main(){
println(Foo1(5))
val i : Int? = 5
println(Foo2(i))
}

输出:

5

5



不同之处在于 println(Foo1(i))无法编译。 i必须解包。

关于kotlin - 关于Kotlin中泛型的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518944/

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