我有一个扩展了另一个类的类:
public class PDFCrawler extends WebCrawler
并且我在我的PDFCrawler类中重写了一个方法,如下所示:
@Override
public boolean shouldVisit(Page page, WebURL url) {...}
它给我在Eclipse上的错误。为项目设置了Java 8:
PDFCrawler类型的方法shouldVisit(Page,WebURL)必须重写
或实现超类型方法。
但是,在同一个PDFCrawler类中,当我按如下方法重写其他方法时,未显示错误:
@Override
public void visit(Page page) {...}
这两种方法均来自名为WebCrawler的超类。超类方法如下:
public boolean shouldVisit(Page page, WebURL url) {
return true;
}
public void visit(Page page) {
// Do nothing by default
// Sub-classed should override this to add their custom functionality
}
该超类取自Crawler4j project。因为我无法覆盖第一个方法,所以超类中的方法总是在执行。
有什么线索吗?
编辑
我的类PDFCrawler的import语句:
package com.example.ict;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import java.util.regex.Pattern;
import com.google.common.io.Files;
import edu.uci.ics.crawler4j.crawler.Page;
import edu.uci.ics.crawler4j.crawler.WebCrawler;
import edu.uci.ics.crawler4j.url.WebURL;
最佳答案
我猜您正在使用较旧版本的crawler4j的jar文件。此方法的签名在过去有所不同,并且在不支持向后兼容性的情况下进行了更改(不幸的是):https://github.com/yasserg/crawler4j/commit/c874761011d63e77977b914810eb44c054845233
使用最新版本的jar可以解决此问题。