Scalaのマクロを使用してパラメータを使用してJavaアノテーションを生成します。Scalaは:私は1つのパラメータで単純なJavaアノテーションを持って
public @interface Annotations {
Annot[] value();
}
I:また、私は、パラメータとしてAnnotの配列をとる、Javaのアノテーションを持って
public @interface Annot {
String value();
}
次のようにScalaマクロを使用してパラメータ "値"でAnnotを生成したいとします。
object MyAnnotations {
def MyAnnotation: Annot = macro myAnnotationMacro
def myAnnotationMacro(c: whitebox.Context): c.Expr[Annot] = {
import c.universe._
c.Expr(q"""new Annot("value")""")
}
}
while作品れる:
@Annotations(Array(
new Annot("value")
))
trait T
これは動作しません:
@Annotations(Array(
MyAnnotations.MyAnnotation
)) // too many arguments for constructor Annot:()Annot
trait T
なぜ?そして、私はAnnotをどのように生成できますか?