我可以使用不受约束的类型参数:
interface State<V>
或者我可以使用一个约束类型参数:
interface State<V: Any>
这看起来是一样的,因为"In Kotlin, everything is an object [...]"。但这可能是欺骗性的。如果我倾向于第二个而不是第一个,它会有什么后果?
我可以使用不受约束的类型参数:
interface State<V>
或者我可以使用一个约束类型参数:
interface State<V: Any>
这看起来是一样的,因为"In Kotlin, everything is an object [...]"。但这可能是欺骗性的。如果我倾向于第二个而不是第一个,它会有什么后果?
2条答案
按热度按时间iqxoj9l91#
在Kotlin中使用
Any
作为类型参数约束的效果是允许任何类型用作类型参数。这在某些情况下非常有用,因为它允许您创建可以接受任何类型的泛型函数和类,但它也有一些缺点。例如,使用Any
做为型别参数条件约束可能会产生非类型安全的程式码,并使两柴潜在的错误变得困难。此外,它也会使程式码变得难以了解,并可能导致未预期的行为。yhuiod9q2#
请注意,默认上限不是
Any
,而是Any?
。如果我们写interface State<V>
或interface State<V : Any?>
,没有区别-这是一样的。但是,
interface State<V : Any>
不同,它将T
约束为不可空类型:如果我们不指定上限或将其设置为
Any?
,上述两个类都可以很好地编译。