我何时应该在scala中使用泛型类中的类型绑定?

时间:2017-01-23 23:37:09

标签: scala generics

我有一个像这样的泛型类,我只想在T为Int时调用函数“one”。

class A[T] {
    def one[T <: Int] = 1
}
val a = new A[String]
a.one

但这会编译。

我发现我可以这样做:

class A[T] {
    def one(implicit ev: T <:< Int) = 1
}
val a = new A[String]
a.one
<console>:14: error: Cannot prove that String <:< Int.

为什么?

1 个答案:

答案 0 :(得分:3)

在第一种情况下,您有两个不同且不相关的 T参数:一个在类上,另一个在方法上。因此,当您致电a.one时,one&#39; TInt

在第二种情况下,one没有自己的T参数,因此在T <:< Int中您有A&#39; s {{1} }。当您致电T时,a.one&#39; AT且不满足约束。