怎么说类型参数必须有一个替代超类型的超类型?

Joh*_*ood 6 scala

可以说类型参数T必须具有特定的超类型S_1:

class Test[T <: S_1] 
Run Code Online (Sandbox Code Playgroud)

有没有办法说,一个类型参数必须至少有一个超类型的多个超类型备选方案?像(伪代码)的东西:

class Test[T <: S_1 || S_2] 
Run Code Online (Sandbox Code Playgroud)

或者:这是不可能的,因为这样的结构毫无意义,并且会在代码中暗示设计错误?

Nik*_* B. 9

简答:直观的解决方案是制作S_1S_2分享一个共同的特征,代表你的类型参数所需的一组能力T.使用该特征作为上限T.

更多可能性:

  • 如果S_1S_2在本质上无关的和你的类型的要求T是,它具有一定的成员(即既S_1S_2发生器),你可以使用一个结构类型制定的是(背后的理念被称为鸭打字).

  • 如果由于某种原因你确实需要T成为S_1or 的子类S_2,并且你不能更改这些类型,你可以使用implicits将这两者转换为新引入的内部类型S_1_or_2,然后可以将其用作上限T.