我希望能够做这样的事情(实际上不会起作用):
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)
这样的事情可能吗?
您可以使用隐式:
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]。