0
我試圖用一個靜態方法的Java類,T
,在宏實現:使用靜態Java聲明中宏實現
def macroImpl[T : c.WeakTypeTag](c: Context): c.Expr[ResultType] = {
import c.universe._
val tpe = weakTypeOf[T]
val someStaticMethod = tpe.declaration(c.universe.newTermName("someStaticMethod")).asMethod
c.Expr[ResultType] { q""" new ResultType {
def myMethod = ${someStaticMethod.name.toTermName}
}"""}
}
這是行不通的。當我打印出tpe
的所有成員和聲明時,我想要使用的靜態方法不存在。我如何訪問這些靜態方法並在quasiquote中使用它們?
我使用宏天堂編譯器插件的版本2.1.0爲scala 2.10.6。
靜態方法建模爲同伴對象的方法得到的
companion
聲明。 –@ som-snytt我如何找到同伴?它看起來像在2.11 API中可以做'tpe.companion',但我使用的是2.10 – mushroom