类型错误 - 方差 - Scala

时间:2016-02-06 09:37:07

标签: scala

def test[T<:AnyVal](s:T):T={
s+1
}

这显示此错误:

  

:11:错误:类型不匹配;

     

发现:Int(1)

     

必需:字符串          S + 1

当T是AnyVal的类型时,为什么需要String?

1 个答案:

答案 0 :(得分:0)

我不确定您为什么会收到关于String的错误 - 虽然我怀疑它是因为您还未包含在此答案中的其他代码 - 但是,如果要在AnyVal参数上调用+方法,s约束不足,则您发布的代码无效。

这是猜测,因为你还没有提到你正在尝试做什么,但我想它是&#34;我想要一个为任何数字加1的函数,无论其类型如何&#34;。

如果是这样,AnyVal可能会受到限制(例如BigInt不是AnyVal)。实际上,您根本不需要这样的约束,而是您需要访问Numeric[T]实例。 Numeric是一个类型类,提供多个运算符 - 包括+

用法看起来像这样(如果您还没有理解这一点,可能需要查看scala的含义):

def test[T](x: T)(implicit numeric: Numeric[T]): T = {
    numeric.plus(x,numeric.one)
}

如果您确定自己确实需要AnyVal约束,仍然可以添加Node约束。