2017-01-23 131 views
2

我有一個這樣的泛型類,我只想當T是Int時調用函數「one」。什麼時候應該在scala中使用泛型類中的類型綁定?

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. 

爲什麼?

回答

3

在第一種情況下,您有兩個不同且不相關的T參數:一個關於類,另一個關於方法。所以當你撥打a.one時,oneTInt

在第二種情況下one沒有自己的T參數,所以在T <:< Int你有AT。當您致電a.one時,ATString,它不符合界限。

相關問題