【问题标题】:Why can't I use Override annotation?为什么我不能使用 Override 注释?
【发布时间】:2015-06-14 02:27:09
【问题描述】:

我有一个类扩展了另一个类:

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 的导入语句:

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;

【问题讨论】:

  • 相同的Page 类型?相同的WebURL 类型?
  • 也许你正在使用来自不同包的WebURL..
  • 嗨@SotiriosDelimanolis 我的方法和超类方法的参数是相同的。即使我保持数据类型和名称与超类中的相同
  • @CommuSoft 我想你误会了。 WebCrawler 声明了一个带有edu.uci.ics.crawler4j.crawler.Pageedu.uci.ics.crawler4j.url.WebURL 类型参数的shouldVisit 方法。如果 OP 在与PDFCrawler 相同的包中具有com.example.Page 类型,则在编译PDFCrawler 时将使用该Page 类型。
  • @CommuSoft 另外,我不相信你可以扩大 Java 中的参数类型。

标签: java inheritance subclass superclass overriding


【解决方案1】:

我猜你正在使用旧版本 crawler4j 的 jar 文件。此方法的签名与过去不同,并且在不支持向后兼容性的情况下进行了更改(很遗憾):https://github.com/yasserg/crawler4j/commit/c874761011d63e77977b914810eb44c054845233

使用最新版本的 jar 应该可以解决问题。

【讨论】:

  • 嗨@Yasser 感谢您的回答。我正在使用它的 3.5 版。
  • 这是版本不匹配的问题。 v4.1 完美运行。
【解决方案2】:

您对WebURL 的导入错误,这将起作用:

public boolean shouldVisit(Page page, edu.uci.ics.crawler4j.url.WebURL url) {...}

Page 在其他@Override 中使用它是可以的,但不是WebURL,所以最好修复导入!

【讨论】:

  • 嗨@Jordi,我已经导入了edu.uci.ics.crawler4j.url.WebURL,我的错误是在导入之后。
【解决方案3】:

PDFCrawler.shouldVisit 方法使用不同的参数类型。很可能这些类型来自不同的包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2021-10-27
    相关资源
    最近更新 更多