【发布时间】:2018-03-19 21:46:27
【问题描述】:
我很难在 scala 中找到同时施加上限和下限的方法。我需要创建一个泛型函数,其中类型参数既可散列(AnyRef 的子类型)又可空(Null 的超类型)。
我可以这样实现前者:
def foo[T <: AnyRef](t: T) = ???
而后者是这样的:
def bar[T >: Null)(t: T) = ???
有没有一种方法可以同时进行?谢谢。
【问题讨论】:
-
一般来说,我不知道是否可以在两个方向上都有类型边界。但是在特定情况下,Scala中的Null的AnyRef超类型的所有子类型不都是吗?
-
不,因为 Nothing 是 Null 的子类型,因此,它不会让我将 null 分配给以 AnyRef 的子类型为边界的类型的变量。
-
嗯。有趣的。 @lambdista 的解决方案似乎对我有用(虽然我尝试过,但颠倒类型边界的顺序
def foo[T <: AnyRef >: Null]( t : T ) = ???没有)