w czystym środowisku Scala, mogę wykonać następujące czynności gdybym chciał „dodać” do metody fabryki do istniejącego obiektu:Jak dodać metody fabryki do istniejącej klasy Java w Scala
object Test
object Extensions {
object RichTest {
def someFactory = new Test()
}
implicit def fromTest(t: Test.type) = RichTest
}
...
import Extensions._
val t = Test.someFactory
I potrzebowałby takiej funkcjonalności w połączeniu z istniejącą klasą Java. W moim konkretnym przykładzie, chciałbym dodać metodę fabryczną fromLocation
do klasy com.google.android.maps.GeoPoint
(i myślę, że każdy deweloper Android będzie wiedział dlaczego miałoby to być przydatne ;-)).
Jednak, gdy próbuję coś zrobić jak
implicit def fromGeoPoint(t: GeoPoint.type) = RichTest
otrzymuję komunikat o błędzie informujący
niezgodność typów; znaleziono: com.google.android.maps.GeoPoint.type (typu bazowego z obiektu com.google.android.maps.GeoPoint) wymagane: AnyRef
Więc zastanawiam się, czy istnieje jakikolwiek sposób, jak powyżej podejście może realizowane - a to zapewnia niejawnego konwersji z Location
do GeoPoint
być korzystny sposób Scala więc Location
można stosować, gdy wymagany jest GeoPoint
?
Zgodnie z wnioskiem w komentarzach, scenariusz Zastosowanie:
// 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, ...)
....
}
Jednakże, należy pamiętać, że jest to tylko jeden konkretny przykład dla ogólnego problemu ;-)
Czy możesz podać przykład kodu, który użyłby tej metody fabrycznej? Na przykład z GeoPoints i Lokalizacjami. Naprawdę nie rozumiem tego pytania. – Fixpoint
@Fixpoint done ;-) – Leo