मैं कुछ स्थिरांक बनाने के लिए एनम का उपयोग करता हूं:
enum ids {OPEN, CLOSE};
ओपेन मूल्य शून्य है, लेकिन मैं इसे 100 के रूप में चाहता हूं। क्या यह संभव है?
enum ids {OPEN = 100, CLOSE};
?
मैं कुछ स्थिरांक बनाने के लिए एनम का उपयोग करता हूं:
enum ids {OPEN, CLOSE};
ओपेन मूल्य शून्य है, लेकिन मैं इसे 100 के रूप में चाहता हूं। क्या यह संभव है?
enum ids {OPEN = 100, CLOSE};
?
जवाबों:
जावा एनम सी या सी ++ एनम की तरह नहीं हैं, जो वास्तव में पूर्णांक के लिए लेबल हैं।
जावा एनम को कक्षाओं की तरह अधिक कार्यान्वित किया जाता है - और उनमें कई गुण भी हो सकते हैं।
public enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
बड़ा अंतर यह है कि वे टाइप-सेफ हैं, जिसका मतलब है कि आपको SIZE वैरिएबल के लिए कलर एनम असाइन करने की चिंता नहीं करनी चाहिए।
अधिक के लिए http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html देखें ।
enum class
।
हाँ। आप गणनाकर्ता को संख्यात्मक मान पास कर सकते हैं, जैसे:
enum Ids {
OPEN(100),
CLOSE(200);
private int value;
private Ids(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
देखें सन जावा भाषा गाइड अधिक जानकारी के लिए।
value
एक (कहते हैं) शून्य को आरंभीकृत करता है। फिर DANCE
मूल्यों की सूची में शामिल करें (कहें) ।
इस तरह का उपयोग करने के बारे में whats:
public enum HL_COLORS{
YELLOW,
ORANGE;
public int getColorValue() {
switch (this) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
}
एक ही विधि है ।।
आप स्टैटिक विधि का उपयोग कर सकते हैं और Enum को पैरामीटर की तरह पास कर सकते हैं:
public enum HL_COLORS{
YELLOW,
ORANGE;
public static int getColorValue(HL_COLORS hl) {
switch (hl) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
ध्यान दें कि ये दो तरीके कम मेमोरी और अधिक प्रोसेस यूनिट का उपयोग करते हैं .. मैं नहीं कहता कि यह सबसे अच्छा तरीका है लेकिन इसका सिर्फ एक और तरीका है।
getColorValue()
दूसरे उदाहरण में सिंक्रनाइज़ क्यों किया गया है ?
HL_COLORS.getColorValue(HL_COLORS.YELLOW);
enum को इनिशियलाइज़ किए बिना करना चाह सकते हैं ।
यदि आप बहुत बड़े ईनम प्रकारों का उपयोग करते हैं, तो निम्नलिखित उपयोगी हो सकते हैं;
public enum deneme {
UPDATE, UPDATE_FAILED;
private static Map<Integer, deneme> ss = new TreeMap<Integer,deneme>();
private static final int START_VALUE = 100;
private int value;
static {
for(int i=0;i<values().length;i++)
{
values()[i].value = START_VALUE + i;
ss.put(values()[i].value, values()[i]);
}
}
public static deneme fromInt(int i) {
return ss.get(i);
}
public int value() {
return value;
}
}
यदि आप सी / सी ++ (बेस नंबर और नेक्स्ट इन्क्रीमेंटल) की गणना करना चाहते हैं:)
enum ids {
OPEN, CLOSE;
//
private static final int BASE_ORDINAL = 100;
public int getCode() {
return ordinal() + BASE_ORDINAL;
}
};
public class TestEnum {
public static void main (String... args){
for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) {
System.out.println(i.toString() + " " +
i.ordinal() + " " +
i.getCode());
}
}
}
OPEN 0 100 CLOSE 1 101
ऑर्डिनल () फ़ंक्शन एनम में पहचानकर्ता की सापेक्ष स्थिति लौटाता है। सी-स्टाइल एनम के साथ, ऑफसेट के साथ स्वचालित अनुक्रमण प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं।
उदाहरण:
public class TestEnum {
enum ids {
OPEN,
CLOSE,
OTHER;
public final int value = 100 + ordinal();
};
public static void main(String arg[]) {
System.out.println("OPEN: " + ids.OPEN.value);
System.out.println("CLOSE: " + ids.CLOSE.value);
System.out.println("OTHER: " + ids.OTHER.value);
}
};
आउटपुट देता है:
OPEN: 100
CLOSE: 101
OTHER: 102
संपादित करें: बस एहसास हुआ कि यह ग्रैगैंड्स के उत्तर के समान है , लेकिन मैं इसे यहां छोड़ दूंगा क्योंकि यह बहुत साफ है और लगभग उतना ही है जितना आप सी स्टाइल एनम को प्राप्त कर सकते हैं।
@scottf
एनुम एक सिंगलटन की तरह है। JVM उदाहरण बनाता है।
यदि आप इसे कक्षाओं के साथ अपने आप बना लेंगे तो ऐसा लग सकता है
public static class MyEnum {
final public static MyEnum ONE;
final public static MyEnum TWO;
static {
ONE = new MyEnum("1");
TWO = new MyEnum("2");
}
final String enumValue;
private MyEnum(String value){
enumValue = value;
}
@Override
public String toString(){
return enumValue;
}
}
और इस तरह इस्तेमाल किया जा सकता है:
public class HelloWorld{
public static class MyEnum {
final public static MyEnum ONE;
final public static MyEnum TWO;
static {
ONE = new MyEnum("1");
TWO = new MyEnum("2");
}
final String enumValue;
private MyEnum(String value){
enumValue = value;
}
@Override
public String toString(){
return enumValue;
}
}
public static void main(String []args){
System.out.println(MyEnum.ONE);
System.out.println(MyEnum.TWO);
System.out.println(MyEnum.ONE == MyEnum.ONE);
System.out.println("Hello World");
}
}
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
@scottf, शायद आप ENUM में परिभाषित कंस्ट्रक्टर के कारण भ्रमित हैं।
मुझे वह समझाने दो।
जब class loader
भार enum
वर्ग, तब enum
निर्माणकर्ता भी कहा जाता है। किस पर!! हाँ, यह कहा जाता है OPEN
और close
। क्या मूल्यों के साथ 100
के लिए OPEN
और 200
के लिएclose
क्या मेरा अलग मूल्य हो सकता है?
हाँ,
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
id1.setValue(2);
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
public void setValue(int value) { id = value; }
}
लेकिन, यह बुरा अभ्यास है। जैसे कि , पूर्वनिर्धारित स्थिरांक के ऐसे छोटे समूह का enum
प्रतिनिधित्व करने के लिए उपयोग किया जाता है।constants
days of week
colors in rainbow
मुझे लगता है कि आप सी ++ एन्यूमरेटर को देखने से भ्रमित हैं। जावा प्रगणक अलग हैं।
यदि आप C / C ++ के लिए उपयोग किए जाते हैं तो यह कोड होगा:
public class TestEnum {
enum ids {
OPEN,
CLOSE,
OTHER;
public final int value = 100 + ordinal();
};
public static void main(String arg[]) {
System.out.println("OPEN: " + ids.OPEN.value);
System.out.println("CLOSE: " + ids.CLOSE.value);
System.out.println("OTHER: " + ids.OTHER.value);
}
};