我想創建一個從Scala函數(可能是匿名)到java.util.function.Function
的隱式轉換。以下是我有:從Scala函數到Java函數的隱式轉換
import java.util.function.{Function => JavaFunction}
implicit def scalaFunctionToJavaFunction[From, To](function: (From) => To): JavaFunction[From, To] = {
new java.util.function.Function[From, To] {
override def apply(input: From): To = function(input)
}
}
它的工作原理,只是類型推斷失敗時要轉換的功能並沒有明確指定參數類型罰款:
val converted: JavaFunction[String, Int] = (s: String) => s.toInt // works fine
val converted2: JavaFunction[String, Int] = scalaFunctionToJavaFunction(s => s.toInt) // works
val converted3: JavaFunction[String, Int] = s => s.toInt // gives compilation error "missing parameter type"
編譯器能夠推斷出類型
我的問題是:
- 爲什麼Scala編譯器不能推斷第三種情況下的參數類型?
- 我可以修改隱式轉換以便推斷類型嗎?
我知道一個related question觸及這個問題,但沒有給出我的問題的答案。
這個問題似乎沒有涉及與Java的互操作性,順便說一句。如果我用定製的Scala特徵替換JavaFunction
,行爲仍然是一樣的。
A [相關文章](http://www.tikalk.com/incubator/simulating-sam-closures-scala/)我找到了。它沒有提供答案,但觸及了Scala函數隱式轉換的相關主題。 – Mifeet