/ / मैं ओवरराइड एनोटेशन का उपयोग क्यों नहीं कर सकता? - जावा, विरासत, सबक्लास, सुपरक्लास, विधि-ओवरराइडिंग

मैं ओवरराइड एनोटेशन का उपयोग क्यों नहीं कर सकता? - जावा, विरासत, सबक्लास, सुपरक्लास, विधि-ओवरराइडिंग

मेरे पास एक वर्ग है जो एक और वर्ग का विस्तार करता है:

public class PDFCrawler extends WebCrawler

और मैं अपने पीडीएफ क्रॉलर क्लास में एक विधि को ओवरराइड कर रहा हूं:

@Override
public boolean shouldVisit(Page page, WebURL url) {...}

यह मुझे ग्रहण पर त्रुटि देता है। जावा 8 परियोजना के लिए सेट है:

पीडीएफ क्रॉलर के प्रकार की विधि को विज़िट (पृष्ठ, वेबURL) को ओवरराइड करना चाहिए या supertype विधि लागू करें।

हालांकि, एक ही पीडीएफ क्रॉलर क्लास में, जब मैं निम्नानुसार एक अलग विधि ओवरराइड कर रहा हूं, कोई त्रुटि दिखाई नहीं दे रही है:

@Override
public void visit(Page page) {...}

इन दोनों विधियों में वेबक्रॉलर नामक सुपर क्लास से हैं। सुपरक्लास विधियां निम्नानुसार हैं:

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
}

Superclass से लिया जाता है क्रॉलर 4j परियोजना। चूंकि मैं पहली विधि को ओवरराइड नहीं कर सकता, सुपरक्लास में विधि हमेशा निष्पादित हो रही है।

कोई सुराग?

संपादित करें मेरे वर्ग पीडीएफ क्रॉलर के लिए आयात विवरण:

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;

उत्तर:

जवाब के लिए 3 № 1

मैं आपको अनुमान लगा रहा हूं "एक से जार फ़ाइल का उपयोग कर रहे हैंक्रॉलर 4j का पुराना संस्करण। इस विधि का हस्ताक्षर अतीत में अलग था और पिछड़े संगतता (दुर्भाग्य से) के समर्थन के बिना बदला गया था: https://github.com/yasserg/crawler4j/commit/c874761011d63e77977b914810eb44c054845233

जार के नवीनतम संस्करण का उपयोग करना समस्या को ठीक करना चाहिए।


जवाब के लिए 0 № 2

PDFCrawler.shouldVisit विधि विभिन्न पैरामीटर प्रकारों का उपयोग कर रहा है। संभवतः प्रकार एक अलग पैकेज से हैं।


जवाब के लिए 0 № 3

के लिए आपका आयात WebURL गलत है, यह काम करेगा:

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

Page जैसा कि आपने इसे दूसरे में इस्तेमाल किया था @Overrideठीक है, लेकिन नहीं WebURL, आयात को बेहतर ढंग से ठीक करें!