我可以将泛型类型参数限制为2个不相关的类之一吗?

Eug*_*Loy 5 generics scala

我希望能够做这样的事情(实际上不会起作用):

class A[T <: B | C]
Run Code Online (Sandbox Code Playgroud)

......并希望这是有效的:

new A[B]
new A[C]
Run Code Online (Sandbox Code Playgroud)

...这会产生编译器错误:

new A[D]
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Lee*_*Lee 5

您可以使用隐式:

trait AArg[T]

class A[T](implicit e: AArg[T])

implicit val argB = new AArg[B] { }
implicit val argC = new AArg[C] { }
Run Code Online (Sandbox Code Playgroud)

尽管这并不能阻止某人创建 type 的隐式 val AArg[D]

  • 实际上,您*可以*通过使特性“密封”来防止它,假设在应用程序的上下文中这是可取的。 (2认同)