我对以下内容有疑问。
Caused by: java.lang.NoSuchMethodError :ResourcePreviewRepository.objectExists(Ljava/lang/String;)Z
在运行时和调试期间,这是该类。
EntityRepository$GenericRepository$ResourcePreviewRepository$1323269030$Proxy$_$$_WeldClientProxy.objectExists(Unknown Source)
这是 ResourcePreviewRepository 的定义
public interface ResourcePreviewRepository extends GenericRepository<String>, EntityRepository<String, ResourceMetadata>
现在:objectExists 方法确实存在于名为 AbstractJcrRepository 的 GenericRepository 的具体实现中。而且这个方法也是在 EntityRepository 接口(interface)中定义的(我预计问题就在这里)。
public interface GenericRepository<IdentifierType extends Serializable> {
boolean objectExists(IdentifierType id) throws RepositoryException;
}
public class AbstractJcrRepository implements GenericRepository<String> {
@Override
public boolean objectExists(final String id) throws RepositoryException {
...
}
}
请注意,当我向 GenericRepository 添加强制转换时,它确实有效,但显然我不想强制转换。
这是我应该得到的最终实现:
public class JcrResourcePreviewRepositoryImpl extends AbstractJcrEntityRepository<ResourceMetadata> implements ResourcePreviewRepository
但是,尽管我确实有实现和可用的方法,但我收到此错误。我该如何解决这个问题?
感谢您的帮助。
更新解决方案 我不会发布这是一个答案,但我必须将缺少的方法添加到界面中。虽然 Producer 返回的 impl 类确实实现了此方法,但只能通过继承接口(interface)及其扩展来实现。所以在继承链中声明这个方法两次就解决了。
最佳答案
由于 AbstractJcrRepository
没有实现 ResourcePreviewRepository
,因此异常发生时不会使用此实现。
关于java - 方法未发现异常,但方法确实存在并已实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39384544/