যেমনটি, কিছুটা আগে, আগেও উল্লেখ করা হয়েছে, একটি এনাম একটি জাভা বর্গ যা বিশেষ শর্তযুক্ত যে এর সংজ্ঞাটি অবশ্যই কমপক্ষে একটি "এনাম ধ্রুবক" দিয়ে শুরু হওয়া উচিত।
এগুলি ছাড়াও, এবং সেই এনামগুলি অন্য শ্রেণীর প্রসারিত বা প্রসারিত করতে ব্যবহার করা যায় না, এনাম কোনও শ্রেণীর মতো একটি শ্রেণি এবং আপনি ধ্রুবক সংজ্ঞাগুলির নীচে পদ্ধতিগুলি যুক্ত করে এটি ব্যবহার করেন:
public enum MySingleton {
INSTANCE;
public void doSomething() { ... }
public synchronized String getSomething() { return something; }
private String something;
}
আপনি এই লাইন বরাবর একক এর পদ্ধতি অ্যাক্সেস:
MySingleton.INSTANCE.doSomething();
String something = MySingleton.INSTANCE.getSomething();
ক্লাসের পরিবর্তে এনামের ব্যবহার হ'ল অন্যান্য জবাবগুলিতে যেমন উল্লেখ করা হয়েছে, বেশিরভাগ ক্ষেত্রে সিঙ্গলটনের থ্রেড-সেফ ইনস্ট্যান্টেশন এবং গ্যারান্টি যে এটি সর্বদা কেবল একটি অনুলিপি থাকবে।
এবং, সম্ভবত, সবচেয়ে গুরুত্বপূর্ণ, এই আচরণটি নিজেই জেভিএম এবং জাভা স্পেসিফিকেশন দ্বারা গ্যারান্টিযুক্ত।
জাভা স্পেসিফিকেশন থেকে এনাম উদাহরণগুলির একাধিক উদাহরণকে কীভাবে প্রতিরোধ করা হয়েছে সে সম্পর্কে এখানে একটি বিভাগ রয়েছে:
একটি এনাম ধরণের এনাম ধ্রুবক দ্বারা সংজ্ঞায়িত ছাড়া অন্য কোনও দৃষ্টান্ত নেই। এটি একটি এনাম টাইপ স্পষ্টভাবে ইনস্ট্যান্ট করার চেষ্টা করা একটি সংকলন-সময় ত্রুটি। এনুমের চূড়ান্ত ক্লোন পদ্ধতিটি নিশ্চিত করে যে এনাম ধ্রুবকগুলি কখনই ক্লোন করা যায় না, এবং সিরিয়ালাইজেশন প্রক্রিয়া দ্বারা বিশেষ চিকিত্সা নিশ্চিত করে যে নকলকরণের উদাহরণগুলি কখনও ডিসস্রায়ালাইজের ফলে তৈরি হয় না। এনাম ধরণের প্রতিবিম্বিত ইনস্ট্যান্টেশন নিষিদ্ধ। একসাথে, এই চারটি জিনিস নিশ্চিত করে যে এনাম ধ্রুবকগুলির দ্বারা নির্ধারিত এনামের ধরণের কোনও উদাহরণ নেই exist
লক্ষণীয় যে তাত্ক্ষণিকতার পরে কোনও থ্রেড-সুরক্ষা সংক্রান্ত উদ্বেগগুলি সিঙ্ক্রোনাইজড কীওয়ার্ড ইত্যাদির সাথে অন্য কোনও শ্রেণীর মতো হ্যান্ডেল করতে হবে etc.