Java 我可以在编译时从TypeVariable或VariableElement获取注释处理器中底层类的方法列表吗

Java 我可以在编译时从TypeVariable或VariableElement获取注释处理器中底层类的方法列表吗,java,annotations,annotation-processing,Java,Annotations,Annotation Processing,我有一个带注释的类: public class CacheMessageHolder<TestMessage> implements MessageHolder<TestMessage> { protected @MessageHolderType TestMessage message; @Override @SendProtoAll (proto ="protoMessageClass", matchType=MatchType.PARTIAL

我有一个带注释的类:

public class CacheMessageHolder<TestMessage> implements MessageHolder<TestMessage> {
    protected @MessageHolderType TestMessage message;
    @Override
    @SendProtoAll (proto ="protoMessageClass", matchType=MatchType.PARTIAL)
    public void setMessage( TestMessage msg) {
        this.message = msg;     
    }
}
公共类CacheMessageHolder实现MessageHolder{
受保护的@MessageHolderType TestMessage消息;
@凌驾
@SendProtoAll(proto=“protoMessageClass”,matchType=matchType.PARTIAL)
公共无效设置消息(TestMessage消息){
this.message=msg;
}
}
在我的注释处理器中,我希望获得传递到setMessage方法的对象上的getter方法列表,然后将这些信息用于代码生成

我扩展了ElementScanner6,并设法得到一个似乎包含参数的VariableElement,但我不知道从这里可以走到哪里

因此,在本例中,我希望在编译时获取TestMessage类中的所有方法


任何想法

注释处理都非常繁琐,而且很快就会迷失方向。。我认为您应该获取与此参数元素对应的类型,然后获取与此类型对应的元素,然后获取其成员并过滤它们。尝试使用以下代码,并让我知道它是否有效:

VariableElement parameterElement;
ProcessingEnvironment processingEnv;

TypeMirror parameterType = parameterElement.asType();
Types typeUtils = processingEnv.getTypeUtils();
TypeElement typeElement = (TypeElement) typeUtils.asElement(parameterType);
Elements elementUtils = processingEnv.getElementUtils()
List<? extends Element> elementMembers = elementUtils.getAllMembers(typeElement);
List<ExecutableElement> elementMethods = ElementFilter.methodsIn(elementMembers);
for(ExecutableElement methodElement : elementMethods) {
    if (methodElement.getParameters().size()==0 && methodElement.getSimpleName().toString().startsWith("get")) {
      // do something
    }
}
VariableElement参数元素;
加工环境加工V;
TypeMirror parameterType=parameterElement.asType();
typetypeutils=processingEnv.getTypeUtils();
TypeElement类型元素=(TypeElement)typeUtils.asElement(parameterType);
Elements elementUtils=processingEnv.getElementUtils()

利斯特曼。这个答案太棒了!我不知道elementsUtils和ElementFilter。很难找到关于这个API的好教程。非常感谢你!!!