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

在类型(Scala)上指定多个约束,scala,types,Scala,Types,我正在尝试这样做: abstract class DbFinder[T <: PublicKey with Null] 这让我很高兴地回到零 我想我对第一行代码有点困惑。我想坚持T扩展了公钥,但T也可以为null。我该怎么做 关于我认为最好的方法是使用一个选项,因此您可以使用None来模拟空传递: abstract class DbFinder{def someMethod(a: Option[PublicKey]): Any = ...} 在您的代码中,Null约束是多余的,因为每个

我正在尝试这样做:

abstract class DbFinder[T <: PublicKey with Null]
这让我很高兴地回到零

我想我对第一行代码有点困惑。我想坚持T扩展了公钥,但T也可以为null。我该怎么做


关于

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

abstract class DbFinder{def someMethod(a: Option[PublicKey]): Any = ...}
在您的代码中,Null约束是多余的,因为每个Scala引用类型都继承自Null,所以您只需声明您期望一个PublicKey子类实例

顺便说一句,您应该避免在Scala中使用null,正如我前面所说的。

如下:

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

抽象类DbFinder[T>:Null不,Null是所有引用类型的子类型。Nothing是所有类型的子类型。当我看到PublicKey带有Null时,我想到了同样的事情,不是吗?:)我们正在尝试“获取”可以通过ID识别的内容。因此,如果您进行查询,但未返回任何内容,那么您需要以某种方式处理该问题)是的,您必须匹配输入值,如果需要,我可以扩展代码以包括…@RichOliver我将根据您的进一步信息编辑答案,谢谢。
abstract class DbFinder[T >: Null <: PublicKey]