所以, 我有JavaAssist实现接口并添加接口提供的getter / setter。然后我获得了一个现在有一个接口的类的新实例,并尝试从中调用它:
interfaceWrapper.getMainInterface().getLowerInterface()
但是,我在getLowerInterface()
调用时得到了一个AbstractMethodError,但是我已经让JavaAssist将该方法注入到类中。
有关如何调用此方法的任何想法?我是在接口方面做错了还是在JavaAssist方面做错了?
感谢。
答案 0 :(得分:0)
根据AbstractMethodError
JavaDocs:
当应用程序尝试调用抽象方法时抛出。通常,编译器会捕获此错误;如果自上次编译当前正在执行的方法以来某些类的定义发生了不兼容的更改,则此错误只能在运行时发生。
如果这是编译期间发生的错误,您可能正在做一些事情,例如在子类(定义抽象版本的类)中调用super.getLowerInterface()
。
如果在运行时发生这种情况,则会更改并重新编译* .class文件,但不会重新编译另一个需要它的类。
您应该仔细查看interfaceWrapper.getMainInterface().getLowerInterface()
,特别是将该调用一直追溯到其最终目的地,这显然必须是一个不存在的 - 抽象 - 函数。