একটি এনাম টাইপ হলো একটি বিশেষ ডেটা টাইপ, যার সাহায্যে একটি ভ্যারিয়েবল আগে থেকে নির্ধারিত কনস্ট্যান্টের একটি সেট হতে পারে।
ভ্যারিয়েবলটিকে অবশ্যই তার জন্য আগে থেকে নির্ধারণ করা মানগুলোর একটির সমান হতে হবে।
কমন উদাহরণের মধ্যে আছে কম্পাসের দিকগুলো (যেমন NORTH, SOUTH, EAST আর WEST মান) এবং সপ্তাহের বার।
যেহেতু এগুলো কনস্ট্যান্ট, তাই একটি এনাম টাইপের ফিল্ডের নাম বড় হাতের অক্ষরে লেখা হয়।
Java প্রোগ্রামিং ভাষায় আপনি enum কিওয়ার্ড ব্যবহার করে একটি এনাম টাইপ ডিফাইন করেন।
উদাহরণস্বরূপ, সপ্তাহের বারের একটি এনাম টাইপ আপনি এভাবে নির্দিষ্ট করবেন:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
আপনার যখনই নির্দিষ্ট কিছু কনস্ট্যান্টের একটি সেট উপস্থাপন করার দরকার হবে, তখনই এনাম টাইপ ব্যবহার করা উচিত। এর মধ্যে পড়ে আমাদের সৌরজগতের গ্রহের মতো স্বাভাবিক এনাম টাইপ, আর সেইসব ডেটা সেট যেখানে কম্পাইল টাইমেই আপনি সব সম্ভাব্য মান জানেন, যেমন মেনুর পছন্দ, কমান্ড লাইন ফ্ল্যাগ ইত্যাদি।
নিচের কোডটি দেখায় কীভাবে উপরে ডিফাইন করা DayOfWeek এনামটি ব্যবহার করবেন:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
Java প্রোগ্রামিং ভাষার এনাম টাইপগুলো অন্য ভাষার সমতুল্য জিনিসগুলোর চেয়ে অনেক বেশি শক্তিশালী।
enum ডিক্লারেশন একটি ক্লাস ডিফাইন করে (যাকে এনাম টাইপ বলা হয়)।
এনাম ক্লাসের বডিতে মেথড এবং অন্যান্য ফিল্ড থাকতে পারে:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
Rating এনাম টাইপের একটি মেম্বারের ওপর getNumberOfStars মেথড কল করলে:
Rating.GOOD.getNumberOfStars();
// => 4
কম্পাইলার একটি এনাম তৈরি করার সময় স্বয়ংক্রিয়ভাবে কিছু বিশেষ মেথড যোগ করে।
যেমন, এদের একটি স্ট্যাটিক values মেথড আছে, যা এনামের সব মান যে ক্রমে ডিক্লেয়ার করা হয়েছে সেই ক্রমে ধারণ করা একটি অ্যারে রিটার্ন করে:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
উপরের স্নিপেটটি নিচের লাইনগুলো প্রিন্ট করবে:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
কম্পাইলার একটি স্ট্যাটিক valueOf মেথডও যোগ করে, যা নামের ভিত্তিতে একটি এনাম মেম্বার রিটার্ন করে:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY