Как добавить фабричный метод к существующему классу Java в Scala

В чистой среде 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, ...)
    ....
}

Однако имейте в виду, что это всего лишь один конкретный пример для общей проблемы ;-)

9
задан Leo 5 March 2012 в 23:48
поделиться