为什么我不能使用 Override 注释?
Why can't I use Override annotation?
我有一个 class 扩展另一个 class:
public class PDFCrawler extends WebCrawler
我正在我的 PDFCrawler class 中重写一个方法,如下所示:
@Override
public boolean shouldVisit(Page page, WebURL url) {...}
它在 Eclipse 上给我错误。 Java项目设置为8:
The method shouldVisit(Page, WebURL) of type PDFCrawler must override
or implement supertype method.
但是,在同一个 PDFCrawler class 中,当我如下覆盖不同的方法时,没有显示错误:
@Override
public void visit(Page page) {...}
这两个方法都来自超级class的WebCrawler。 superclass方法如下:
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
}
超class取自Crawler4j project。由于我无法重写第一个方法,所以 superclass 中的方法总是被执行。
有什么线索吗?
编辑
我的 class PDFCrawler 的导入语句:
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;
PDFCrawler.shouldVisit 方法使用不同的参数类型。这些类型很可能来自不同的包。
您对 WebURL
的导入是错误的,这将起作用:
public boolean shouldVisit(Page page, edu.uci.ics.crawler4j.url.WebURL url) {...}
Page
正如您在其他 @Override
中使用的那样,可以,但不是 WebURL
,所以最好修复导入!
我猜您正在使用旧版本的 crawler4j 中的 jar 文件。此方法的签名与过去不同,并且在不支持向后兼容的情况下进行了更改(不幸的是):https://github.com/yasserg/crawler4j/commit/c874761011d63e77977b914810eb44c054845233
使用最新版本的 jar 应该可以解决问题。
我有一个 class 扩展另一个 class:
public class PDFCrawler extends WebCrawler
我正在我的 PDFCrawler class 中重写一个方法,如下所示:
@Override
public boolean shouldVisit(Page page, WebURL url) {...}
它在 Eclipse 上给我错误。 Java项目设置为8:
The method shouldVisit(Page, WebURL) of type PDFCrawler must override or implement supertype method.
但是,在同一个 PDFCrawler class 中,当我如下覆盖不同的方法时,没有显示错误:
@Override
public void visit(Page page) {...}
这两个方法都来自超级class的WebCrawler。 superclass方法如下:
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
}
超class取自Crawler4j project。由于我无法重写第一个方法,所以 superclass 中的方法总是被执行。
有什么线索吗?
编辑 我的 class PDFCrawler 的导入语句:
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;
PDFCrawler.shouldVisit 方法使用不同的参数类型。这些类型很可能来自不同的包。
您对 WebURL
的导入是错误的,这将起作用:
public boolean shouldVisit(Page page, edu.uci.ics.crawler4j.url.WebURL url) {...}
Page
正如您在其他 @Override
中使用的那样,可以,但不是 WebURL
,所以最好修复导入!
我猜您正在使用旧版本的 crawler4j 中的 jar 文件。此方法的签名与过去不同,并且在不支持向后兼容的情况下进行了更改(不幸的是):https://github.com/yasserg/crawler4j/commit/c874761011d63e77977b914810eb44c054845233
使用最新版本的 jar 应该可以解决问题。