在注释处理期间获取泛型参数的具体值

时间:2016-02-29 14:36:56

标签: java metaprogramming javac annotation-processing

我有:

class Base<E> {
  E e;
  abstract void f(E other);
}

class Ext extends Base<String> {
  // HERE
}

我想在f(E other)中生成Ext的实现,但无法弄清楚如何告诉生成器EString在这堂课里。基类也可以是接口。 我有JCClassDecl,因此可以查看decl.type.extendingimplementing,但是这本手册很快就会变得一团糟,而我目前所拥有的并不是普遍有效的,所以我会这样做喜欢跳过错误的代码并以当前的一般形式提出问题。

1 个答案:

答案 0 :(得分:1)

啊,我明白了。花了一天时间寻找答案,然后,在提出问题后,需要大约30分钟来解决问题。

答案是:getTypes().memberType( classDecl.sym.type, // this is the extending JCClassDecl varDecl.vartype.type.tsym // this is the parameter JCVarDecl )

javac

看作{{1}} API很难掌握,我希望这会对某人有所帮助。