В чистой среде 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, поэтому Location
можно будет использовать всякий раз, когда GeoPoint
требуется?
Как просили в комментариях, сценарий использования:
// 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, ...)
....
}
Однако имейте в виду, что это всего лишь один конкретный пример для общей проблемы ;-)