2016-05-21 5 views
2
trait F[S]{ 
    def evaluate(): S 
} 

Из типаOf [F [Double]] как можно найти, что тип возврата «оценка» равен Double?Как искать тип метода, возвращающего параметр типа с отражением scala?

typeOf[F[Double]] 
.decls 
.filter(_.name.toString=="evaluate") 
.head 
.asMethod 
.returnType 
.dealias 

==> S

тип информации, которая возвращает оценку двойной не стертые - это только кажется, что его трудно смотреть вверх и совпадают с параметрами типа:

typeOf[F[Double]].typeArgs 

==> Список (Двухместный)

Ее возможно, что мои классы могут иметь множество параметров типа, так что я не могу быть уверен, что S является первым параметром типа, но типы типа пара амеры, кажется, известны.

ответ

3

Вы можете использовать asSeenFrom.

val tpe = typeOf[F[Double]] 

tpe.decls 
    .filter(_.name.toString == "evaluate") 
    .head 
    .asMethod 
    .returnType 
    .asSeenFrom(tpe, tpe.typeSymbol) 
Смежные вопросы