kotlin 如果我一般使用'Any'作为类型参数约束,会有什么结果?

fae0ux8s  于 2022-12-04  发布在  Kotlin
关注(0)|答案(2)|浏览(193)

我可以使用不受约束的类型参数:

interface State<V>

或者我可以使用一个约束类型参数:

interface State<V: Any>

这看起来是一样的,因为"In Kotlin, everything is an object [...]"。但这可能是欺骗性的。如果我倾向于第二个而不是第一个,它会有什么后果?

iqxoj9l9

iqxoj9l91#

在Kotlin中使用Any作为类型参数约束的效果是允许任何类型用作类型参数。这在某些情况下非常有用,因为它允许您创建可以接受任何类型的泛型函数和类,但它也有一些缺点。例如,使用Any做为型别参数条件约束可能会产生非类型安全的程式码,并使两柴潜在的错误变得困难。此外,它也会使程式码变得难以了解,并可能导致未预期的行为。

yhuiod9q

yhuiod9q2#

请注意,默认上限不是Any,而是Any?。如果我们写interface State<V>interface State<V : Any?>,没有区别-这是一样的。
但是,interface State<V : Any>不同,它将T约束为不可空类型:

interface State<V : Any>

class StringState : State<String> // ok
class NullableStringState : State<String?> // compile error

如果我们不指定上限或将其设置为Any?,上述两个类都可以很好地编译。

相关问题