আমি এনাম ব্যবহার করে কয়েকটি ধ্রুবক তৈরি করেছি:
enum ids {OPEN, CLOSE};
ওপেনের মানটি শূন্য, তবে আমি এটি 100 হিসাবে চাই it এটি কি সম্ভব?
enum ids {OPEN = 100, CLOSE};
?
আমি এনাম ব্যবহার করে কয়েকটি ধ্রুবক তৈরি করেছি:
enum ids {OPEN, CLOSE};
ওপেনের মানটি শূন্য, তবে আমি এটি 100 হিসাবে চাই it এটি কি সম্ভব?
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; }
}
বড় পার্থক্যটি হ'ল এগুলি টাইপ-সেফ যার অর্থ আপনার একটি সাইজ ভেরিয়েবলের জন্য একটি রঙিন এনাম দেওয়ার বিষয়ে চিন্তা করার দরকার নেই।
আরও জানতে 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
মানগুলির তালিকায় (বলুন) অন্তর্ভুক্ত করুন ।
এইভাবে ব্যবহার সম্পর্কে কি:
public enum HL_COLORS{
YELLOW,
ORANGE;
public int getColorValue() {
switch (this) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
}
শুধুমাত্র একটি পদ্ধতি আছে ..
আপনি স্থিতিশীল পদ্ধতি ব্যবহার করতে পারেন এবং এনামকে প্যারামিটার হিসাবে পাস করতে পারেন:
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);
এনাম শুরু না করে আপনি চাইবেন ।
আপনি যদি খুব বড় এনাম টাইপ ব্যবহার করেন তবে নিম্নলিখিতগুলি কার্যকর হতে পারে;
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
একটি এনাম সিঙ্গলটনের মতো। জেভিএম উদাহরণ তৈরি করে।
আপনি যদি নিজের দ্বারা এটি ক্লাসগুলির সাথে তৈরি করেন তবে এটি দেখতে এমন হতে পারে
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; }
}
@ স্কটফ, 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
পূর্বনির্ধারিত ধ্রুবক অর্থাৎ এত ছোট গ্রুপ।
আমি মনে করি আপনি সি ++ গণনার দিকে তাকিয়ে বিভ্রান্ত হয়েছেন। জাভা গণক পৃথক।
আপনি যদি সি / সি ++ এনামগুলিতে অভ্যস্ত হন তবে এই কোডটি হবে:
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);
}
};