मैं अपने प्रकार का उल्लेख किए बिना अपने जावा एनम का संदर्भ कैसे दे सकता हूं


83

मेरे पास एक वर्ग है जो अपनी खुद की दुश्मनी को इस तरह परिभाषित करता है:

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  // << Gives "E1 cannot be resolved" in eclipse.
    }
    public Test2(MyEnum e) {}
}

यदि मैं MyEnum.E1 निर्दिष्ट करता हूं तो यह ठीक काम करता है, लेकिन मैं वास्तव में इसे "E1" के रूप में लेना चाहता हूं। कोई भी विचार कि मैं इसे कैसे पूरा कर सकता हूं, या क्या इसे काम करने के लिए किसी अन्य फ़ाइल में परिभाषित किया जाना है?

निष्कर्ष: मैं आयात सही के लिए वाक्यविन्यास प्राप्त करने में सक्षम नहीं था। चूंकि कई उत्तर सुझाए गए थे, यह संभव था, मैं वह चयन करने जा रहा हूं जिसने मुझे सिंटैक्स दिया जो मुझे आवश्यक था और दूसरों को उभारना था।

वैसे, इसका एक वास्तविक अंश (इससे पहले कि मैं काम करने के लिए स्थैतिक आयात करता था), एक स्विच स्टेटमेंट मैंने लिखा था कि एनम का उपयोग करने से एनम को अपने प्रकार से उपसर्ग करने की अनुमति नहीं मिली - बाकी सभी कोड की आवश्यकता है। मेरे सिर पर चोट


9
स्विच स्टेटमेंट पर "वास्तव में अजीब" व्यवहार के बारे में: जावा एक स्विच स्टेटमेंट में सभी एनमों पर ऐसा करता है। जब से आप जानते हैं कि आप किस प्रकार पर स्विच कर रहे हैं, तो वे आपको हर मामले ब्लॉक में फिर से टाइप निर्दिष्ट करने का कोई कारण नहीं है। download.oracle.com/javase/tutorial/java/javaOO/enum.html
स्ट्रिपिंगवर्कर

1
मुझे लगता है कि मुझे जो मिला है वह यह है कि यह एनम प्रकार के उपसर्ग की अनुमति नहीं देगा। हर जगह और उपसर्ग या तो आवश्यक है (यदि आयात नहीं किया गया है) या वैकल्पिक।
बिल

switchअसंगति के संदर्भ में मैं आपसे सहमत हूं , कम अनुभवी जावा प्रोग्रामर अपने सिर खुजलाते हैं।
jmarkmurphy

जवाबों:


134

वास्तव में, आप नेस्टेड एनुम का स्थैतिक आयात कर सकते हैं । नीचे दिए गए कोड ठीक संकलित करते हैं:

package mypackage;

import static mypackage.Test.MyEnum.*;

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  
    }

    public static void Test2(MyEnum e) {}
}

1
मैंने इसे अपने प्रश्न में एक समाधान के रूप में बताया, लेकिन मैं वास्तव में ऐसा नहीं करूंगा। एनम केवल इस एक फ़ाइल के अंदर उपयोग किए जाते हैं। यह सिर्फ अजीब लगता है कि यह सिर्फ स्वचालित रूप से काम नहीं करता है।
बिल K

हालांकि आपको एक स्थिर आयात का उपयोग करना होगा, आपको इसे अपनी कक्षा में परिभाषित करने की आवश्यकता नहीं है।
यिशै

5
@ बिल के, आपको क्यों लगता है कि यह अपने आप काम करना चाहिए? तब आप कैसे काम करने की उम्मीद करेंगे? कक्षा ए {एनुम बी {एक्स, वाई}; एनम सी {एक्स, जेड}; }
केविन बॉरिलिन

3
यह समाधान केवल इसलिए काम करता है क्योंकि MyEnum टेस्ट के बाहर दिखाई देता है। यदि MyEnum है, उदाहरण के लिए, निजी
चेरि

2
पिछले भाग, प्रतीकों को मत भूलना "। *" में स्थैतिक mypackage.Test.MyEnum आयात करें। *? " जैसा मैंने किया!
जोरू

18

आप नेस्टेड क्लास पर एक स्थिर आयात कर सकते हैं:

import static apackage.Test.Enum.*;

6

आयात करने के लिए टेस्ट क्लास को एक पैकेज में परिभाषित किया जाना है।

पैकेज Test( आईटी कार्यों ) में परिभाषित के साथ :

package mypackage;

आप उपयोग कर सकते हैं:

import static mypackage.Test.MyEnum.*;

पैकेज परिभाषित किए बिना, आप उपयोग नहीं कर सकते ( काम नहीं करता है ):

import static Test.MyEnum.*;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.