调用getDeclaredAnnotation()时出现NoSuchMethodError

时间:2019-05-05 09:13:13

标签: java nosuchmethoderror

我有一个正在运行的应用程序,在其中单击表的“编辑” 链接后,NoSuchMethodError的日志中出现错误,并且控件停留在当前页面,而不是进入编辑页面。

在获取错误时,下面的代码已被击中;

Field[] fields = entityObj.getClass().getDeclaredFields(); 
    for(int i=0;i<fields.length;i++){
        Field field =fields[i];         
        field.setAccessible(true);  
        if(field.getDeclaredAnnotation(EmbeddedId.class)!=null){
            return true;
        }
    }
    return false;

在上面的代码行中, if(field.getDeclaredAnnotation(EmbeddedId.class)!=null) 我遇到了特定的错误。

还提到了以下日志;

Caused by: java.lang.NoSuchMethodError: java.lang.reflect.Field.getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
    at com.sprint.neo.querymodel.common.QueryObjectUtil.checkEnitityIsHasEmbeddedId(QueryObjectUtil.java:131)
    at com.sprint.neo.querymodel.common.EntityManager.getEntityObject(EntityManager.java:89)
    at com.sprint.neo.querymodel.common.EntityManager.loadEntityObject(EntityManager.java:72)
    at com.sprint.neo.querymodel.common.EntityManager.entityload(EntityManager.java:60)
    at com.sprint.neo.querymodel.common.EntityManager.loadAndGetEntityObject(EntityManager.java:56)
    at com.sprint.neo.querymodel.common.QueryObjectUtil.getListOfEntityObject(QueryObjectUtil.java:718)
    at com.sprint.neo.querymodel.common.QueryObjectCache.excuteUpdate(QueryObjectCache.java:251)
    at com.sprint.neo.querymodel.common.QueryObjectRow.excuteUpdate(QueryObjectRow.java:298)
    at com.sprint.neo.engine.controller.actions.TaskViewEditAction.edit(TaskViewEditAction.java:83)

由于所有jsp均已正确实现,因此控件应进入 edit jsp 页。 我对日志中的错误表示怀疑的是,是否缺少关于Reflection api的 jar 文件。 请为我提出解决此问题的解决方案。任何有价值的建议都会有所帮助。非常感谢。

1 个答案:

答案 0 :(得分:1)

您正在使用方法Field.getDeclaredAnnotation(Class)。此方法是Java 8中引入的。在Java 7及更早版本中不可用。您需要升级您的JDK。

FieldAccessibleObject的子类,并从该类继承方法。参见the Javadoc:它说“ Since:1.8”,这是内部编号方案中Java 8的版本。