繁体   English   中英

Java-无法获得自定义注释的值

[英]Java - Not able to get value of Custom Annotation

我有一个这样的自定义注释-

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ControllerAction {
    String value();
}

我有一个使用这种注释的类-

public class TestController extends AbstractController {

    public TestController () {
        super();
    }

    @ControllerAction("add")
    public void addCandidate(){

    }

}

超级类看起来像这样-

public abstract class AbstractController {

    public AbstractController (){

    }

    public CustomBean processRequest(ServletAction action, HttpServletRequest request) {
        Class<AbstractController > controllerClass = AbstractController.class;
        for (Method method : controllerClass.getDeclaredMethods()) {
            if (method.isAnnotationPresent(ControllerAction.class)) {
                Annotation annotation = (ControllerAction) method.getAnnotation(ControllerAction.class);
                if(annotation != null){
                    if(annotation.value().equals(action.getAction())){
                        method.invoke(controllerClass.newInstance());
                    }
                }
            }
        }
        return null;
    }
}

直接从Servlet调用AbstractControllerprocessRequest(...)方法。 processRequest()方法确定servlet动作,并在此基础上适当调用该方法。 例如,如果ServletAction.getAction() == 'add' ,则processRequest()应该在TestController自动调用addCandidate() 但是我无法获得注释的价值。 annotation.value()以某种方式在Eclipse中给出了编译错误。 Eclipse没有显示我可以用来获取注释值的任何方法。

我想知道是否有一种获取自定义注释的value()的方法。 我不想用String value()以外的其他任何方式定义Annotation。 我想知道是否可以通过自定义注释中的String value()实现我想要的?

任何帮助是极大的赞赏。 谢谢。

您可能需要更改

Annotation annotation = (ControllerAction) method.getAnnotation(ControllerAction.class);

ControllerAction annotation = method.getAnnotation(ControllerAction.class);

否则,由于annotation的类型为Annotation ,因此编译器将无法知道ControllerAction特定方法。

此外,正如Sharon Ben Asher指出的那样,您应该使用getClass()而不是AbstractController.class在运行时获取实际实现的类。 给定当前代码,将仅检查AbstractController的方法,而不检查实现类的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM