gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:56:18 25 4
gpt4 key购买 nike

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

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

我有一个像这样使用此注释的类 -

public class TestController extends AbstractController {

public TestController () {
super();
}

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

}

}

父类(super class)看起来像这样 -

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;
}
}

processRequest(...) AbstractController中的方法直接从 servlet 调用。 processRequest() 方法确定 servlet 操作,并基于此,它应该适本地调用该方法。例如,如果 ServletAction.getAction() == 'add' , processRequest()应该自动调用addCandidate()TestController 。但我无法获得注释的值。不知何故annotation.value()在 eclipse 中给出编译错误。 Eclipse 没有显示任何我可以用来获取注释值的方法。

我想知道是否有办法获取自定义注释的 value() 。我不想用 String value() 以外的任何东西来定义我的注释。 。我想知道仅 String value() 是否可以实现我想要的目标在我的自定义注释中?

非常感谢任何帮助。谢谢。

最佳答案

你可能需要改变

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

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

否则,编译器将无法识别 ControllerAction 特有的方法,因为 annotation 的类型为 Annotation

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

关于Java - 无法获取自定义注释的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com