【发布时间】:2009-07-24 00:47:31
【问题描述】:
我正在 Eclipse 中开发一个项目,当我使用 jetty 插件启动时,它会给我一个
java.lang.AbstractMethodError:
au.com.mycopmpany.impl.MyClassDAOImpl.findById(Ljava/lang/Integer;)Ljava/lang/Object;.
此文件在 Eclipse 中编译良好,代码正在实现错误所涉及的方法。从我的阅读来看,这个错误表明 JVM 在“运行时”找到了一个没有实现这个方法的类。
但我可以向您保证,MyClassDAOImpl 绝对确实具有使用正确签名实现的 findById 方法。
这似乎是 Eclipse 编译器中的一个错误;我可以通过在命令提示符下运行 maven package 然后在 Eclipse 中运行应用程序来解决此问题。
Eclipse 编译器似乎存在与此类相关的某种错误。我确实在网上读过一些关于 Eclipse 编译器中泛型的错误(这个类确实使用泛型)但是这个基类/接口在我们的代码库中一遍又一遍地重新实现,而且这个类总是有问题。
有没有人知道解决这个问题的方法,或者更好的方法?
我可以每次都复制此异常,因此如果 Eclipse 编译器开发人员阅读此内容并且这是一个已知问题,请随时与我联系以寻求帮助以跟踪问题。
更新:
有问题的类是实现GenericDAO 的众多类之一,其中通用接口定义为:
public interface GenericDAO<T, TList>
失败的方法是:
public T findById(Integer integer) throws APIException;
【问题讨论】:
-
基类或接口将参数声明为什么;整数,还是链上的东西,比如 Serializable?我想知道它是否正在为参数生成需要更高级别(如可序列化)的代码,但它正在获取整数并且不知何故没有意识到它实现了可序列化。
-
是否需要用 super 或 extends 声明 id 参数的类型?例如,公共抽象类 BaseDao
>注意,我只是在黑暗中刺伤和猜测。 -
Lumpynose - 这可能是一个解决方案,我会尝试一下,但是还有 30 多个其他类实现了这个接口并且它们工作正常。