হ্যাঁ, এটি এনামের প্রতিটি মানের জন্য আপনি সিঙ্গলটন উদাহরণ তৈরি করেছেন:
সার্বজনীন বিমূর্ত শ্রেণি রাউন্ডিংমড {
পাবলিক স্ট্যাটিক ফাইনাল রাউন্ডিংমোড HALF_UP = নতুন রাউন্ডিংমোড ();
সর্বজনীন স্ট্যাটিক ফাইনাল রাউন্ডিংমোড HALF_EVEN = নতুন রাউন্ডিংমোড ();
ব্যক্তিগত রাউন্ডিংমোড () {
// ব্যক্তিগত সুযোগ এই শ্রেণীর বাইরে যে কোনও উপ-টাইপ প্রতিরোধ করে
}
}
তবে , enum
কনস্ট্রাক্ট আপনি বিভিন্ন সুবিধা দেয়:
- প্রতিটি উদাহরণের স্ট্রাস্টিং () কোডে দেওয়া নামটি মুদ্রণ করে।
- (অন্য পোস্টে উল্লিখিত হিসাবে,) এনাম টাইপের একটি পরিবর্তনশীল
switch-case
নিয়ন্ত্রণ কাঠামো ব্যবহার করে ধ্রুবকের সাথে তুলনা করা যেতে পারে can
values
প্রতিটি এনুম টাইপের জন্য 'উত্পন্ন' ক্ষেত্রটি ব্যবহার করে গণনার সমস্ত মান জিজ্ঞাসা করা যেতে পারে
- এখানে বড় এক পরিচয় পরিচয় তুলনা: এনাম মান ক্লোনিং ছাড়াই সিরিয়ালাইজেশন টিকে আছে।
সিরিয়ালাইজেশন হ'ল বড় গোচা ya যদি আমি এনামের পরিবর্তে উপরের কোডটি ব্যবহার করি, তবে পরিচয়ের সাম্য কীভাবে আচরণ করবে তা এখানে:
রাউন্ডিংমোড আসল = রাউন্ডিংমোড Hএইচএলএফ_আপ;
জোড় (রাউন্ডিংমোড.এইএলএফ_ইউপি == আসল); // পাস
বাইটআরআউটআউটপুটস্ট্রিম বাওস = নতুন বাইটআরআউটপুটস্ট্রিম ();
অবজেক্টআউটপুটস্ট্রিম oos = নতুন অবজেক্টআউটপুটস্ট্রিম (বাওস);
oos.writeObject (মূল);
oos.flush ();
বাইটআরআইআইপুট স্ট্রিম বাইস = নতুন বাইটআরআইআইপুট স্ট্রিম (baos.toByteArray ());
অবজেক্টআইপুট স্ট্রিম ois = নতুন অবজেক্টইনপুটস্ট্রিম (বাইস);
রাউন্ডিংমোড deserialized = (রাউন্ডিংমোড) ois.readObject ();
দাবী (রাউন্ডিংমোড.এইএএলএফ_ইউপি == ডিজিসায়ালাইজড); // ব্যর্থ
দাবী (রাউন্ডিংমোড.এইএএলএফ_ইভিএন == ডিজিট্রাইজড); // ব্যর্থ
আপনি এনাম ছাড়াই এই সমস্যাটি সমাধান করতে পারেন , এমন একটি প্রযুক্তি ব্যবহার করে writeReplace
এবং readResolve
( http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html দেখুন ) ...
আমার অনুমানটিটি হ'ল - জাভা আপনাকে সমতা পরীক্ষার জন্য এনাম ভ্যালু'র পরিচয় ব্যবহার করার অনুমতি দেবে না; এটি একটি উত্সাহিত অনুশীলন।