2016-06-18 21 views
1

クラス名でクラスのパラメータを見つけ、私はこのような何かを持っている:私はマクロ注釈に取り組んでいます

def findClass(className: String) : ClassSymbol = { 
    val tree = c.typecheck(c.parse(s"??? : ${className}")); 
    return tree.tpe.typeSymbol.asClass; 
} 

問題はclassNameListのようなものであるとき、それは明らかにそれので文句ということですパラメータが必要です。 List[String]の場合は問題ありません。

正直なところ、リストのジェネリック型が不変であると考えると、classOf[List]が受け入れられないなどの理由は完全にはわかりません。 classOf[List[String]]classOf[List[Integer]]を実行すると、同じクラスが返されます。

したがって、私のメソッドfindClassは、パラメータを持たないクラスまたは不変のパラメータを持つクラスを常に受け​​取ると仮定すると、どのようにしてValDefの型チェックを行うことができますか?

答えて

0

理由、例えば、classOf [リスト]は、これを書くための正しい方法は、他の用途との一貫性を保つため、classOf[List[_]]であるため、一覧でジェネリック型を

不変であることを考えると受け入れられていません。パラメータの分散は重要ではありません( Listは共変で、不変ではありません)。

これは醜いです、そしてなど、そこに私が考えるに失敗していますおそらく、より良い解決策がありますが、あなたはs"??? : ${className}"s"??? : ${className}[_]"を型チェックしてみてください可能性が

+0

はい、私はこれを行っている方法です現時点では、しかし、試してみて、エラーは非常に醜いです。たぶん抽出器やラムダ型関数を使った方が良い解決策が必要です。しかし、いずれにしても傾けることはできません。 – lqbweb

関連する問題