/ / Java戻り値の型はWebCrawler.visit(Page)と互換性がありません - java、web-crawler、crawler4j、incompatibletypeerror

Java戻り値の型はWebCrawler.visit(Page)と互換性がありません - java、web-crawler、crawler4j、incompatibletypeerror

私はいくつかのクローラコードを使用しています http://code.google.com/p/crawler4j/.

今、私がしようとしているのは、MyCrawlerクラスにあるすべてのURLに別のクラスからアクセスすることです。

私はクローラを始める:

// * Start the crawl. This is a blocking operation, meaning that your code
// * will reach the line after this only when crawling is finished.
controller.start(MyCrawler.class, numberOfCrawlers);

URLを取得するために「戻る」を使用しようとすると、次のエラーが表示されます。

The return type is incompatible with WebCrawler.visit(Page)

タイプを「無効」に変更するように私に要求しますが、もちろん、私はしたくありません。

ここには私が問題を抱えている機能があります:

@Override
public  String visit(Page page) {
url = page.getWebURL().getURL();
System.out.println("URL: " + url);

if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
List<WebURL> links = htmlParseData.getOutgoingUrls();

System.out.println("Text length: " + text.length());
System.out.println("Html length: " + html.length());
System.out.println("Number of outgoing links: " + links.size());

return url;

}

私はまた、ゲッターを使用しようとしましたが、それは "ブロッキング操作"なので、それは動作しません。アイデアがなくなりました。

回答:

回答№1は1

メソッドを変更すると、メソッドをオーバーライドすることはできません。メソッドシグネチャ。署名を変更した場合は、新しい方法を作成しています。あなたが望むのは、あなたが訪れたURLのリストで、URLを返す代わりにArrayListに格納し、リストを返すgetterを作成してみてください。