在类型上指定多个约束(Scala)

时间:2013-10-08 17:31:57

标签: scala types

我正在尝试做这样的事情:

abstract class DbFinder[T <: PublicKey with Null]

但是当我尝试将类型为T的对象返回为null时,它无法编译。以前我曾经:

abstract class DbFinder[T >: Null]

我很高兴让我返回null。

我认为我对第一行代码感到困惑。我想坚持认为T扩展了PublicKey,但T也可以为空。我该怎么做?

此致

2 个答案:

答案 0 :(得分:6)

我认为最好的方法是使用Option,这样你就可以使用None来模拟null传递:

abstract class DbFinder{def someMethod(a: Option[PublicKey]): Any = ...}

在您的代码中,Null约束是多余的,因为每个Scala引用类型都继承自Null,因此您只是声明您期望一个PublicKey子类实例。

顺便说一句,你应该避免在Scala中使用null,如上所述。

答案 1 :(得分:2)

像这样:

abstract class DbFinder[T >: Null <: PublicKey]

使用Null作为上限无济于事,因为Nothing是默认下限,而Nothing不能是null