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

Imr*_*ran 2 types scala

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

abstract class DbFinder[T <: PublicKey with Null]
Run Code Online (Sandbox Code Playgroud)

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

abstract class DbFinder[T >: Null]
Run Code Online (Sandbox Code Playgroud)

很高兴让我回归null.

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

问候

Vin*_*gio 6

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

abstract class DbFinder{def someMethod(a: Option[PublicKey]): Any = ...}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不,Null是所有引用类型的子类型.没有什么是所有类型的子类型. (2认同)