在Scala中,是否有可能对模板化类型提供任意限制?在我正在处理的特定情况下,我有一个包含两个模板参数的类,如下所示:
class TwoWayMap[S,T]( )
{
...
}
我正在尝试围绕一对地图的薄包装,允许用户在两个方向上查找键。限制两种类型不相同将允许根据类型查找值,允许我写下以下两种:
def apply( t : T )
def apply( s : S )
但显然如果类型相同,这不起作用,所以我想限制S!= T
答案 0 :(得分:2)
由于Java类型擦除,def apply(t: T)
和def apply(s: S)
将导致def apply(...: Object)
,这将是不明确的。
因此,即使你发现S != T
的限制,这也是不可能的。
答案 1 :(得分: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))
}
// ...
}
也许这对你来说太过模糊了。