java 如何将元素转换为方法?

5ktev3wc  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(111)

我正在为一个名为“Auditable”的注解构建一个注解处理器,这个处理器由构建器调用(为了便于阅读,有些部分被省略了):

@Override
public boolean process( Set<? extends TypeElement> annotations,
        RoundEnvironment roundEnv ) {

    //--- Obtain all annotated elements
    Set<? extends Element> annotatedElements =
            roundEnv.getElementsAnnotatedWith( Auditable.class );

    //--- Separate elements into classes, fields and methods
    for ( Element element : annotatedElements ) {
        ElementKind kind = element.getKind();
        if ( ElementKind.METHOD.equals( kind ) ) {
            checkAndAddMethod( element );  // <-- Must convert Element to Method
        } 
    ... }

void checkAndAddMethod( Method method ) {  // <-- parameter type = Method

如何将带注解的Element转换为Method

qmb5sa22

qmb5sa221#

我不认为你可以,因为语言模型代表代码,而反射代表正在运行的JVM。也许你可以用ExecutableElement来代替吗?它代表方法、构造函数或初始化器,作为语言模型的一部分。

omhiaaxx

omhiaaxx2#

如果一个注解有足够的数据,比如类名、方法名和参数等,那么下面的代码片段可以为您提供一个Method对象。

String className = // Get from the annotation attribute
String argumentClassName = // Get from the annotation attribute
String methodName = // Get from the annotation attribute

Class myClass = Class.forName(className);
Class argumentClass = Class.forName(argumentClassName);
Method method = myClass.getDeclaredMethod(methodName, argumentClass);

有关示例,请参考此link1link2

相关问题