純粋な 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
したがって、上記のアプローチを実装する方法があるかどうか、またはaが必要なときにいつでも a を使用できるように、からの暗黙的な変換を 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, ...)
....
}
ただし、これは一般的な問題の具体例の 1 つにすぎないことに注意してください ;-)