এনাম এবং এর সকল বৈশিষ্ট্য- ১

"হাই, অ্যামিগো!"

"হাই, অ্যামিগো!"

"আমি আপনাকে খুব আকর্ষণীয় কিছু সম্পর্কে বলতে যাচ্ছি। এটি বেশ সহজ, কিন্তু এটি এটিকে আরও আকর্ষণীয় করে তোলে। এটিকে একটি enum বলা হয়। একটি enum হল একটি প্রকার যা একটি ভেরিয়েবল থাকতে পারে এমন নির্দিষ্ট মানগুলির সংজ্ঞায়িত করে। আসুন দেখি সরাসরি একটি উদাহরণে:"

একটি enum ক্লাসের সংজ্ঞা
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
একটি enum ব্যবহার করে
Direction direction = Direction.LEFT;

if (direction == Direction.LEFT)
 direction = Direction.RIGHT;
else
 direction = Direction.DOWN;

"তাহলে আমরা শুধু মানগুলির একটি সেট তালিকাভুক্ত করি এবং এটাই?"

"হ্যাঁ, আমরা একটি enum ঘোষণা করি এবং ভিতরে তার সম্ভাব্য সমস্ত মানগুলিকে একটি কমা দ্বারা পৃথক করে তালিকাভুক্ত করি।"

"এটি ব্যবহার করাও বেশ সহজ।"

"আপনি নাল সেট করতে পারেন?"

"হ্যাঁ, একটি enum একটি নিয়মিত ক্লাস, অথবা বরং এটি একটি শ্রেণীর মত, ইন্টারফেসগুলি ক্লাসের মতো।"

"তাহলে আমি যেখানেই ক্লাস ব্যবহার করতে পারি, আমি কি enum ব্যবহার করতে পারি?"

"হ্যাঁ."

"আমি কি ক্লাসের ভিতরে একটি enum ঘোষণা করতে পারি?"

"হ্যাঁ."

"এবং একটি enum উত্তরাধিকারী?"

"না, আপনি একটি enum উত্তরাধিকারী হতে পারবেন না এবং একটি enum অন্যান্য শ্রেণীর উত্তরাধিকারী হতে পারে না।"

"সেটা কেন?"

"কারণ জাভা কম্পাইলার enums কে প্রায় এটিতে রূপান্তর করে:

public final class Direction extends Enum
{
 public static final Direction UP = new Direction();
 public static final Direction DOWN = new Direction();
 public static final Direction LEFT = new Direction();
 public static final Direction RIGHT = new Direction();

 private Direction() {} // Private constructor
}

"আপনি এই উদাহরণ থেকে দেখতে পারেন:"

1) দিকনির্দেশ ক্লাস একেবারে Enum ক্লাসের উত্তরাধিকারী, তাই এটি অন্য কিছুর উত্তরাধিকারী হতে পারে না।

2) দিকনির্দেশ শ্রেণী চূড়ান্ত হিসাবে ঘোষণা করা হয়েছে, তাই অন্য কিছুই এটি উত্তরাধিকারী হতে পারে না।

3) দিকনির্দেশ ক্লাসের ভেরিয়েবলগুলি আসলে পাবলিক স্ট্যাটিক ফাইনাল ডিরেকশন ভেরিয়েবল। এটি তাদের ব্যবহার করে এমন কোডে স্পষ্ট:

দিক নির্দেশনা = দিকনির্দেশ .LEFT ;

4) দিকনির্দেশ ক্লাসে শুধুমাত্র একটি কনস্ট্রাক্টর রয়েছে এবং এটি ব্যক্তিগত। এর মানে হল যে দিকনির্দেশ বস্তুগুলি শুধুমাত্র ক্লাসের ভিতরে কোড ব্যবহার করে তৈরি করা যেতে পারে। ঘোষিত অবজেক্ট ছাড়া অন্য কোন অবজেক্ট তৈরি করা যাবে না।

5) দিকনির্দেশ ভেরিয়েবলগুলি বিদ্যমান যেকোন দিকনির্দেশ বস্তুর একটি রেফারেন্স বরাদ্দ করা যেতে পারে। তারা সব enum মধ্যে সেট করা হয়. এই ধরনের অন্য কোন বস্তু নেই, এবং ভবিষ্যতে অন্য কোন বস্তু থাকবে না।

6) দিকনির্দেশ বস্তুগুলিকে «==» ব্যবহার করে তুলনা করা যেতে পারে, যা কেবল একটি সাধারণ রেফারেন্স তুলনা করবে।"

"আমি বলব না এটা খুব পরিষ্কার, তবে আপনার উদাহরণের পরে এটি আরও পরিষ্কার।"

"দারুণ। তাহলে এখানে আপনার জন্য আরও কিছু তথ্য আছে:"

1) প্রতিটি দিকনির্দেশের বস্তুর নিজস্ব অনন্য সংখ্যা রয়েছে। প্রথম (UP) হল 0, দ্বিতীয়টি (DOWN) হল 1, তৃতীয়টি (LEFT) হল 2, ইত্যাদি। আপনি ordinal() পদ্ধতি ব্যবহার করে এই নম্বর পেতে পারেন। "পর্দার দিকে তাকাও:

Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();

2) প্রতিটি enum এর একটি মান () পদ্ধতি রয়েছে যা enum এর মানগুলির একটি অ্যারে প্রদান করে।

int leftIndex = Direction.LEFT.ordinal();

Direction[] array = Direction.values();
Direction left = array[leftIndex];

"এর মানে আমরা যেকোনো enum উপাদানের সূচী পেতে পারি, এবং তারপর সেই সূচকটি ব্যবহার করে আবার উপাদানটি পেতে পারি।"

"আমরা একটি foreach লুপে একটি enum ব্যবহার করতে পারি :"

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
স্ক্রীন আউটপুট:
UP
DOWN
LEFT
RIGHT

"এর মানে কি enum toString পদ্ধতিকে ওভাররাইড করে? সর্বোপরি, এটি এমন কিছু প্রদর্শন করে না:"
«com.codegym.Direction@123fd4»?

"হ্যাঁ। তাছাড়া, প্রতিটি enum, এবং সেইজন্য দিকনির্দেশ, একটি স্ট্রিং এবং তদ্বিপরীত রূপান্তরিত হতে পারে।"

একটি স্ট্রিং এ রূপান্তর করুন:
String left = Direction.LEFT.toString(); // left == "LEFT";
একটি স্ট্রিংকে একটি enum এ রূপান্তর করুন:
Direction direction = Direction.valueOf("LEFT");

"ওহ, বুঝেছি।"

"কি হবে যদি আপনি ভ্যালুঅফ ফাংশনে একটি স্ট্রিং পাস করেন যা দিকনির্দেশে নেই? উদাহরণস্বরূপ, «AMIGO»?"

"আপনি কি মনে করেন?"

"একটি ব্যতিক্রম?"

"হ্যাঁ। একটি অবৈধ আর্গুমেন্ট ব্যতিক্রম।"

"ঠিক আছে, এটি enums জগতের সাথে আমাদের পরিচিতি গুটিয়ে দেয়।"