工廠方法添加到現有的Java類在純Scala的環境中,我可以做到以下幾點,如果我想一個工廠方法「添加」到現有對象:如何在斯卡拉
object Test
object Extensions {
object RichTest {
def someFactory = new Test()
}
implicit def fromTest(t: Test.type) = RichTest
}
...
import Extensions._
val t = Test.someFactory
我需要將這樣的功能與現有的Java類結合使用。在我的具體例子中,我想添加一個工廠方法fromLocation
到類com.google.android.maps.GeoPoint
(我想每個Android開發人員都會知道爲什麼這會很有用;-))。
但是,如果我嘗試做一些像
implicit def fromGeoPoint(t: GeoPoint.type) = RichTest
我得到一個錯誤,說明
類型不匹配;發現:com.google.android.maps.GeoPoint.type(與基礎類型的對象com.google.android.maps.GeoPoint)要求:AnyRef
所以我不知道是否有任何方式上面的方法怎麼可能被實現 - 或者將提供從Location
到GeoPoint
的隱式轉換是Scala的首選方式,因此只要需要GeoPoint
就可以使用Location
?
的要求,在評論中,使用場景:
// Callback you get from the GPS
override def onLocationChanged(l: Location) {
// You want to put a marker on a map, hence a GeoPoint is required
val gp: GeoPoint = GeoPoint.fromLocation(location)
val item = new OverlayItem(gp, ...)
....
}
但是,請記住,這僅僅是一個
你能否舉一個使用這個工廠方法的代碼的例子嗎?例如,使用GeoPoints和Locations。我不太瞭解這個問題。 – Fixpoint 2012-03-05 23:19:18
@完成點;-) – Leo 2012-03-06 11:05:58