在 Scala 中,是否可以对模板化类型提供任意限制?在我正在处理的特定情况下,我有一个带有两个模板参数的类,如下所示:
class TwoWayMap[S,T]( )
{
...
}
我正在尝试围绕一对地图进行薄包装,允许用户在两个方向上查找键。将两种类型限制为不相同将允许根据类型查找值,从而允许我编写以下两个内容:
def apply( t : T )
def apply( s : S )
但显然,如果类型相同,这不起作用,所以我想限制 S != T
由于 Java 类型擦除两者def apply(t: T)
都会def apply(s: S)
导致def apply(...: Object)
其中不明确。
因此,即使您会发现S != T
对此有限制也是不可能的。
除了 Joa Ebert 写道: 解决此问题的一种可能方法是使用以下Either
类型:
class TwoWayMap[S,T] {
def apply(k:Either[S,T]):Either[S,T] = k match {
case Left(s) => Right(tForS(s))
case Right(t) => Left(sForT(t))
}
// ...
}
也许它对你来说太多样板。