1

在 Scala 中,是否可以对模板化类型提供任意限制?在我正在处理的特定情况下,我有一个带有两个模板参数的类,如下所示:

class TwoWayMap[S,T]( )
{
    ...
}

我正在尝试围绕一对地图进行薄包装,允许用户在两​​个方向上查找键。将两种类型限制为不相同将允许根据类型查找值,从而允许我编写以下两个内容:

def apply( t : T )
def apply( s : S )

但显然,如果类型相同,这不起作用,所以我想限制 S != T

4

2 回答 2

2

由于 Java 类型擦除两者def apply(t: T)都会def apply(s: S)导致def apply(...: Object)其中不明确。

因此,即使您会发现S != T对此有限制也是不可能的。

于 2013-04-12T09:33:56.763 回答
1

除了 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))
    }
    // ...
}

也许它对你来说太多样板。

于 2013-04-12T11:00:40.930 回答