我有采取了類似並返回可比性和包裝另一個是做同樣的事情方法的方法:視圖綁定與上邊界類型綁定不兼容?
def myMethod[T <: Comparable[T]](arg: T): T = otherMethod(arg)
def otherMethod[T <: Comparable[T]](arg: T): T = arg
這將編譯,但不會允許我這樣稱呼myMethod的用int或任何其他類型這需要隱式轉換才能實現Comparable。據我瞭解,鑑於界限旨在解決這類問題,但使用結合
def myMethod[T <% Comparable[T]](arg: T): T = otherMethod(arg)
我得到的編譯器錯誤的觀點:
inferred type arguments [T] do not conform to method otherMethod's type parameter bounds [T <: java.lang.Comparable[T]]
到目前爲止,唯一的解決方法我已經拿出來就是使用第二種類型參數並且在兩者之間施放:
def myMethod[T <% Comparable[T], U <: Comparable[U]](arg: T): T =
otherMethod(arg.asInstanceOf[U]).asInstanceOf[T]
這個很有效,但很醜。有沒有更好的辦法?
1.不,不幸的是,otherMethod在第三方庫中定義。 2.是!這似乎工作。謝謝! – ethzero
很高興能幫到你:-) –
其實,我說的太快了......第二種解決方案的確可以編譯,但我仍然無法用Int來調用它。這裏是錯誤:「類型參數[Int,Int]不符合方法myMethod的類型參數bounds [U <:java.lang.Comparable [U],T]」 – ethzero