3
def toJson[T](obj: T) = {
gson.toJson(obj)
}
def toJson[T](list: Seq[T]) = {
toJson(seqAsJavaList(list))
}
這不會編譯。這被記錄爲一個功能(see this answer):爲什麼重載的scala函數需要返回類型?
當一個方法被重載並且其中一個方法調用另一個時。調用方法需要返回類型註釋。
問題是:爲什麼?
從上面的鏈接+一些額外的想法從同事,這裏有可能的原因:
- 斯卡拉使用返回類型,以及確定重載方法。這是這種情況,爲什麼它被束縛? (例如,Java不使用返回類型)
- 部分函數 - 如果其中一個方法沒有參數,另一個方法沒有參數,toJson()可能被視爲部分函數,所以不確定是否返回類型爲字符串或功能
我知道這是指定的返回類型的人最好的做法,但爲什麼實際上是上面的代碼中沒有編制,如果返回類型推斷不夠好,爲什麼首先呢?
你的意思是第二個叫'gson'嗎?正如它所寫,它是無限遞歸的。 – joescii
@barnesjd:如果'seqAsJavaList'有任何指示,它不是 - 'java.util.List'不是'Seq [T]'。 –
哦,對了......在這種情況下,它稱爲另一個功能,這是他的問題。謝謝 – joescii