इंटरफेस का उपयोग कर एक्स्टेंसिबल एनम्स इम्यूलेटिंग

तो यहां मैं एक्स्टेंसिबल एनम्स लिखने के बारे में इस "प्रभावी जावा 2 संस्करण" अभ्यास की कोशिश कर रहा था।

हालांकि मुझे वास्तव में एक अजीब मुद्दा का सामना करना पड़ा - मेरे पास प्रत्येक enum उदाहरण इंटरफ़ेस विधियों को लागू करता था और सभी ग्रहण में अच्छा लग रहा था। लेकिन जब मैंने इसे मैवेन के माध्यम से संकलित करने की कोशिश की, तो यह असफल रहा, हालांकि ग्रहण ने पहले किसी भी संकलन त्रुटियों को फेंक नहीं दिया था (मेरे ग्रहण और मेवेन दोनों एक ही जेडीके का उपयोग करते हैं: 1.6.0_33-b05 )। यह पता चला कि मुझे इंटरफ़ेस विधि (ओं) को ओवरराइड करना था [मैं इसे अब से विधि X कहूंगा] enum के अंदर (सभी enum उदाहरणों के बाहर) भी इसे ठीक करने के लिए!

Here's a sample explaining this:

इंटरफ़ेस:

public interface IDay
{
  public boolean isHoliday(); 
}

Enum:

public enum Day implements IDay
{
  SATURDAY
  {
    @Override
    public boolean isHoliday()
    {
      return true;
    }
  },
  SUNDAY
  {
    @Override
    public boolean isHoliday()
    {
      return true;
    }
  },
  MONDAY
  {
    @Override
    public boolean isHoliday()
    {
      return false;
    }
  };

 //Method X: the project won't compile for me without this method!
  public boolean isHoliday()
  {
    return false;
  }

}

प्रार्थना:

public class DayTester
{
  public static void main(final String[] args)
  {
   //line Y: this line won't maven compile if I got rid of the method X
    System.out.println("Sunday: " + Day.SUNDAY.isHoliday());
  }
}

अजीब पर्याप्त, ग्रहण 'X' विधि के बिना ग्रहण पूरी तरह से ठीक था, फिर भी मेवेन संकलन लाइन वाई पर विफल हो जाएगा

[ERROR] लक्ष्य निष्पादित करने में विफल   org.apache.maven.plugins: Maven-संकलक प्लगइन: 2.3.2: संकलन   (डिफ़ॉल्ट-संकलन) परियोजना एक्स पर: संकलन विफलता   [त्रुटि] DayTester.java:[7,46] प्रतीक नहीं मिल सकता [त्रुटि] प्रतीक:   विधि हैहोली() [त्रुटि] स्थान: कक्षा दिवस

और अगर मेरे पास विधि एक्स था तो मेरे ग्रहण कार्यों को स्वचालित रूप से @ ओवरराइड डालने पर कार्रवाई करता है। विधि एक्स को हटाने से मेरे ग्रहण में संकलन त्रुटियों को फेंक दिया जाता है जो पहले मैंने एनोटेशन को ओवरराइड किया था।

यहां मेरे प्रश्न हैं: 1. जब ग्रहण करता है तो इस मामले में मेवेन क्यों संकलित नहीं होगा? 2. ओवरराइड एनोटेशन त्रुटियों का अर्थ यहां क्या है? 3. क्या विधि एक्स किसी भी तरह से सुलभ है? मुझे समझने के लिए क्या याद आ रही है?

2
जेडीके संस्करण: 1.6.0_33-बी05। इसे ओपी पर भी अपडेट किया गया।
जोड़ा लेखक mystarrocks, स्रोत
मुझे संदेह है कि हालांकि यह मामला है। समान वर्ग संरचना के साथ पूरी तरह से अलग कोड एकाधिक पीसी पर एक ही व्यवहार प्रदर्शित करता है।
जोड़ा लेखक mystarrocks, स्रोत
अजीब एन्कोडिंग मुद्दा हो सकता है जो ग्रहण और जावैक अलग-अलग वर्ण देखता है।
जोड़ा लेखक ZhongYu, स्रोत
आप किस जेडीके संस्करण का उपयोग कर रहे हैं?
जोड़ा लेखक MariuszS, स्रोत
मुझे लगता है कि मैवेन ग्रहण की तुलना में विभिन्न जावा भाषा <�कोड> स्रोत संस्करण का उपयोग कर रहा है। javac param source का अर्थ है "निर्दिष्ट रिलीज के साथ स्रोत संगतता प्रदान करें"
जोड़ा लेखक MariuszS, स्रोत

1 उत्तर

@Override annotation

@Override - यह जांचता है कि विधि ओवरराइड है। यदि कोई पैरेंट क्लास या कार्यान्वित इंटरफ़ेस

में विधि नहीं मिली है तो संकलन त्रुटि का कारण बनता है

ग्रहण विन्यास

Properties > Java Compiler > Compiler compliance level = 1.6

परियोजना स्तर पर कंपाइलर अनुपालन स्तर भी देखें।

Properties > Java Compiler > Errors/Warnings

@Override एनोटेशन एनोटेशन के तहत है और डिफ़ॉल्ट रूप से अनदेखा किया जाता है।

मेवेन कॉन्फ़िगरेशन

Add this properties to pom.xml


   1.6
   1.6

This is issued by maven-compile-plugin

    

ध्यान दें कि वर्तमान में डिफ़ॉल्ट स्रोत सेटिंग 1.5 है और डिफ़ॉल्ट लक्ष्य सेटिंग 1.5 है, स्वतंत्र रूप से जेडीके के साथ आप मेवेन चलाते हैं। यदि आप इन डिफ़ॉल्ट को बदलना चाहते हैं, तो आपको जावा कंपाइलर के संसाधन और लक्ष्य को सेट करना

  

और पढो

0
जोड़ा
लाइन वाई पर संकलन विफलता मुख्य चिंता है कि मैं यहां समझने की कोशिश कर रहा हूं। क्षमा करें अगर मैं उस पर स्पष्ट नहीं था। वैसे भी, मैं यह देखने के लिए स्रोत और लक्ष्य सेटिंग्स सेट कर रहा हूं कि ओवरराइड एनोटेशन समस्या समाप्त हो गई है या नहीं। संपादित करें: और ग्रहण में ओवरराइड एनोटेशन त्रुटि की सूचना दी गई थी, न कि जब मैं मैवेन के माध्यम से संकलित करता हूं।
जोड़ा लेखक mystarrocks, स्रोत
यदि आपका मतलब संकलक अनुपालन स्तर है, तो यह 1.6 पर सेट है
जोड़ा लेखक mystarrocks, स्रोत
हाँ। कई बार भी। एफ 3/ctrl + मारना लाइन वाई पर क्लिक करें मुझे इंटरफ़ेस पर विधि परिभाषा भी ले जाएगा! यह समान सेटिंग्स बीटीडब्ल्यू के साथ एक अलग पीसी पर पुनरुत्पादित है।
जोड़ा लेखक mystarrocks, स्रोत
अगर मैं इसे सही ढंग से समझ रहा हूं, तो यह सेटिंग न केवल ओवरराइड एनोटेशन के लिए है। जो मुझे लगता है कि हाथ में समस्या से प्रासंगिक नहीं है?
जोड़ा लेखक mystarrocks, स्रोत
और ग्रहण में कौन सा स्रोत स्तर कॉन्फ़िगर किया गया है? stackoverflow.com/questions/1736730/…
जोड़ा लेखक MariuszS, स्रोत
परियोजना ताज़ा और पुनर्निर्माण किया जाता है?
जोड़ा लेखक MariuszS, स्रोत
गुण> जावा कंपाइलर> त्रुटियां/चेतावनियां @ ओवरराइड देखें
जोड़ा लेखक MariuszS, स्रोत
जोड़ा लेखक MariuszS, स्रोत