2

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

abstract class DbFinder[T <: PublicKey with Null]

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

abstract class DbFinder[T >: Null]

这很高兴让我返回null。

我想我对第一行代码有点困惑。我要坚持 T 扩展 PublicKey 但 T 可以为空。我该怎么做呢?

问候

4

2 回答 2

6

我认为最好的方法是使用选项,因此您可以使用 None 来模拟 null 传递:

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

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

而且,顺便说一句,你应该避免在 Scala 中使用 null,正如我上面所说的。

于 2013-10-08T17:49:20.847 回答
2

像这样:

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

用作Null上限没有帮助,因为Nothing是默认的下限,并且Nothing不能是null.

于 2013-10-08T20:02:31.650 回答