2016-09-26 17 views
0

私は暗黙的に推測していたクラスの種類をキャッチしようとしている:スカラ:ジェネリック暗黙のクラス

case class ToGet(key: String) 

class Builder[T <: AnyRef] { 

    def get(key: String)(implicit mf: Manifest[T]): ToGet = { 
    ToGet(key) 
    } 
} 

object Builder { 

    import scala.reflect.runtime.universe._ 

    implicit class ToGetImplicits(obj: ToGet) { 
    def future[T <: AnyRef]()(implicit mf: Manifest[T]): Future[Option[T]] = ??? 
    } 
} 

私はインスタンスを作成し、上記の未来を呼び出し、それがFuture[Option[Nothing]]を返します。

ここでタイプを取得することは可能ですか、それを設計するにはどうすればよいでしょうか?

EDIT

例えば:

val obj = new Builder[String] 
obj.get("myKey").future() //this returns a Future[Option[Nothing]] 

EDIT 2

ToGetを返し obj.get("myKey")

追加さToGet定義

+0

「ToGet」の定義はどこですか? –

+0

@AlvaroCarrascoスレッドを更新しました –

+0

'buil'に与えられた' T'と 'future'メソッドの型パラメータとして与えられた' T'の間には接続がないようです。 「未来」とは、「何もない」というものです。なぜなら、それはそれが与えられることでできることです。より多くのコードがより良い答えをもたらすかもしれません。 –

答えて

1

。この時点で、マニフェストが提供され無視されました。我々が今持っているのはToGetです。

futureToGetにpimpedされたコールには、使用できるタイプ情報がないため、Nothingを推測します。今

case class ToGet [T] (key: String)(implicit val mf: Manifest[T]) 

そして、あなたの暗黙のクラス:

implicit class ToGetImplicits[T](obj: ToGet[T]) { 
    def future(): Future[Option[T]] = { 
    // you can access obj.mf here for the manifest 
    ??? 
    } 
} 

は、コードの意図に応じて、ToGetクラスに暗黙のパラメータとしてマニフェストを渡したいかもしれません何かは、タイプ情報を持っていなければなりません。

+0

素晴らしい、それを運ぶ方法を理解するのは難しかった...今は明らかだ –

関連する問題