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