これは、私が現在取り組んでいる Http-Client の簡略化です。
class Request[A]( val url: String, val event: Callbacks[A] )
{
def run: Try[A] = ...
}
case class Image( override val url: String, override val event: Callbacks[Bitmap] ) extends Request[Bitmap]
object GET
{
def apply[A <: Request[B] : ClassTag, B : ClassTag]( url: String, event: Callbacks[B] ): Try[B] =
{
classOf[A]
.runtimeClass
.getConstructor( classOf[String], classOf[Callbacks[B]] )
.newInstance( url, event )
.asInstanceOf[A]
.run
}
}
object Main extends App
{
GET[Image, Bitmap]( "http://...", null )
}
GET
次のように呼び出しを行うことができるように、API を改善したいと思います。
GET[Image]( "http://...", null )
一般的な Argumentを指定することはImage
、a を使用していることを意味するはずなBitmap
ので、再度指定したくありません。