2011-12-18 13 views
6

मेरे पास एक सर्वलेट वर्ग है जिसे मैंने उन कार्यों को संभालने के लिए बनाया है जिन्हें मैं हर सर्वलेट पर दोहराना नहीं चाहता हूं। मैं अभी भी इस पर काम कर रहा हूं (यानी यह अभी भी index.jsp लोड करता है और अन्य फाइल नहीं)। ,मेरी कक्षाओं में सुपर() या यह() को कहां रखा जाए

SEVERE: Exception while deploying the app [ContentManagement] : (class: contentmanagement/content/EditServlet, method: <init> signature:()V) Constructor must call super() or this() 

अद्यतन

ठीक है मेरी कंस्ट्रक्टर्स पर void को हटाने:

public class MyServlet extends HttpServlet { 
    public MyServlet() { 
     super(); 
    } 

    public void loadView (HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); 

     response.setContentType("text/html;charset=UTF-8"); 

     System.out.println("MyServlet::LoadView() success"); 

     dispatcher.forward(request, response); 
    } 
} 

मेरे सर्वलेट के रूप में

@WebServlet(name = "EditServlet", urlPatterns = {"/content/edit"}) 
public class EditServlet extends Library.MyServlet { 
    public EditServlet() { 
     super(); 
    } 

    public void doGet (HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     System.out.println("EditServlet loaded"); 
    } 
} 

इस प्रकार मैं तथापि हूँ मेरी कोड संकलन करने में असमर्थ है, और super(); पर कॉल करना must call first भाग दूर जाने के लिए मिला, लेकिन यह अभी भी कह रहा है कि मुझे सुपर कॉल करना होगा इसके बावजूद इसे पहले से ही बुलाया जा रहा है।

अद्यतन

मैं प्रतिसाद नीचे समझते हैं न .... वे निर्माता, जब मेरे उदाहरण पहले से ही पता चलता है कि किया जा रहा है के भीतर super() डाल करने के लिए कह रही है रहते हैं, और यह कोड की पहली पंक्ति है । किसी भी अन्य सलाह की सराहना की जाएगी।

कोई विचार?

अब यह एक गैर-मुद्दा है। मुझे नहीं पता कि इस मुद्दे को किस तरह हल किया गया है, लेकिन कई बदलावों के साथ और मेरे ऐप को ग्राउंड अप से पुनर्निर्माण के साथ अब मैं इस समस्या का अनुभव नहीं कर रहा हूं

+2

करना चाहिए, आप निर्माता में पहली डालने की कोशिश की थी? –

+1

एक कन्स्ट्रक्टर के पास कोई रिटर्न प्रकार नहीं है। MyServlet और EditServlet से पहले शून्य को हटा दें। कोड संकलित करता है? –

+3

क्या आप नेटबीन्स का उपयोग कर रहे हैं? मुझे याद है इस Netbeans मोड़ के बारे में एक समान प्रश्न: http://stackoverflow.com/questions/6560988/method-must-call-super-error-in-netbeans दूसरे शब्दों में, अपने निर्माण गंदा है। उदाहरण के लिए, आपने आईडीई के बजाए फ़ाइल एक्सप्लोरर द्वारा प्रोजेक्ट में क्लास फाइलों का मैन्युअल रूप से नाम बदल दिया/स्थानांतरित कर दिया है। वे रचनाकार पूरी तरह से अनावश्यक तरीके से हैं। सर्वलेट को उनमें से किसी के बिना समान रूप से अच्छा काम करना चाहिए (कोर्स के बाद आप अपने गंदे कक्षा को साफ कर लें)। – BalusC

उत्तर

11

आपका समस्या थी:

method: <init> signature:()V) Constructor must call super() or this()

यह VerifyError लक्षण की तरह लगता है। सफाई और परियोजना के पुनर्निर्माण समस्या को हल करना चाहिए, यह भी देखें:


इसके अलावा, आप एक super() एकल लाइन के साथ अपने कंस्ट्रक्टर को हटा सकते हैं । JVM आपके लिए एक डिफ़ॉल्ट (निहित छिपे हुए) कन्स्ट्रक्टर के साथ करता है। तो, इन अनावश्यक लाइनों स्पष्ट:

public MyServlet() { 
    super(); 
} 

और

public EditServlet() { 
    super(); 
} 

आप स्पष्ट रूप से super() कॉल करने के लिए यदि आप निर्माता में अतिरिक्त व्यापार लाइनों लिखने के लिए की जरूरत होगी।

2

और Library.MyServlet का कन्स्ट्रक्टर कैसा दिखता है? एक नोट के रूप में, यदि super कीवर्ड का उपयोग किसी कन्स्ट्रक्टर में किया जाना है, तो में पहली पंक्ति होने के लिए है। this के लिए वही बात।

क्या आपने खाली कन्स्ट्रक्टर को हटाने का प्रयास किया है? जाहिर है, आप इसका उपयोग नहीं कर रहे हैं।

+0

कन्स्ट्रक्टर – Webnet

+0

@Webnet से ऊपर दिखाया गया है यह आपके कोड में स्पष्ट नहीं है क्योंकि यह 'लाइब्रेरी। MyServlet' बढ़ाता है, लेकिन आपके द्वारा दिखाया गया कोड 'MyServlet' के लिए है। यदि वे वही हैं, तो 'EditServlet' की पहली पंक्ति में' सुपर() 'लिखने का प्रयास करें, या' EditServlet' कन्स्ट्रक्टर –

+0

'MyServlet' लाइब्रेरी पैकेज का हिस्सा है, मुझे यकीन नहीं है कि मैं समझता हूं कि मैं क्या समझता हूं स्पष्ट नहीं है यहां तक ​​कि जब मैं 'EditServlet' पर कन्स्ट्रक्टर को हटाता हूं तब भी' MyServlet' – Webnet

2

Library.MyServlet मान लिया जाये कि एक निर्माता है कि कोई तर्क लेता है, इस काम करना चाहिए:

public class EditServlet extends Library.MyServlet { 
    public EditServlet() { 
     super(); 
     // Rest of initialization code... 
    } 
    //... 
} 
1

आप this() या super() उपयोग करते हैं, यह पहले निर्माता की लाइन होना चाहिए।

public MyClass() { 
    this(someStaticMethod()); 
} 

या

public MyClass() { 
    super(someStaticMethod()); 
} 

और शिल्प अन्य निजी कंस्ट्रक्टर्स सूट करने के लिए:

हालांकि, अगर आप बुला this() या super() से पहले कुछ काम करने की जरूरत है, तो आप इस पैटर्न का उपयोग कर सकते हैं।

आपके द्वारा कॉल की जाने वाली विधियां उदाहरण विधियां नहीं हो सकती हैं, इसलिए यह सभी मामलों के लिए काम नहीं करती है, लेकिन यह आपकी मदद कर सकती है।

+0

पर एक त्रुटि है, यह मेरे कन्स्ट्रक्टर की पहली पंक्ति है, मेरा कोड देखें: - \ – Webnet

2

बस स्वच्छ और निर्माण ... यह एक निर्माण मुद्दा है, अपने वर्ग अब पूरी तरह से सामान्य है। कभी-कभी जब आप कोड को सही करते हैं तो आईडीई आपके कोड के हिस्सों को फिर से संकलित करता है, न कि संपूर्ण कोड। यदि आपको कोई त्रुटि करते हुए कहा कि यह पहली बार किया जाना चाहिए प्राप्त एक साफ और निर्माण चाल

संबंधित मुद्दे