পারি ==ব্যবহার করা enum?
হ্যাঁ: এনামগুলিতে টাইট ইনস্ট্যান্স নিয়ন্ত্রণ রয়েছে যা আপনাকে ==উদাহরণগুলির সাথে তুলনা করতে ব্যবহার করতে দেয় । এখানে ভাষা স্পেসিফিকেশন দ্বারা সরবরাহ করা গ্যারান্টি দেওয়া হয়েছে (আমার দ্বারা জোর দেওয়া):
একটি এনাম ধরণের এনাম ধ্রুবক দ্বারা সংজ্ঞায়িত ছাড়া অন্য কোনও দৃষ্টান্ত নেই।
এটি একটি এনাম টাইপ স্পষ্টভাবে ইনস্ট্যান্ট করার চেষ্টা করা একটি সংকলন-সময় ত্রুটি। final cloneপদ্ধতি Enumনিশ্চিত করে যে enumধ্রুবক ক্লোন হতে পারে না, এবং ধারাবাহিকতাতে প্রক্রিয়া নিশ্চিত করে যে ডুপ্লিকেট দৃষ্টান্ত deserialization ফলে কখনো নির্মিত দ্বারা বিশেষ চিকিত্সা। এনাম ধরণের প্রতিবিম্বিত ইনস্ট্যান্টেশন নিষিদ্ধ। একসাথে, এই চারটি জিনিস নিশ্চিত করে যে ধ্রুবকগুলির enumদ্বারা নির্ধারিত সংখ্যার বাইরে কোনও ধরণের উদাহরণ নেই enum।
যেহেতু প্রতিটি enumধ্রুবকের কেবল একটি উদাহরণ রয়েছে , দুটি অবজেক্টের রেফারেন্সের তুলনা করার সময় পদ্ধতির জায়গায় অপারেটরটি ব্যবহার করা অনুমোদিত যদি জানা যায় যে তাদের মধ্যে কমপক্ষে একটি স্থিরকে বোঝায়==equalsenum । ( equalsপদ্ধতিটি Enumহ'ল এমন একটি finalপদ্ধতি যা কেবল super.equalsতার যুক্তি উপস্থাপন করে এবং ফলাফলটি প্রদর্শন করে, যাতে একটি পরিচয়ের তুলনা করা হয়।
এই গ্যারান্টিটি যথেষ্ট দৃ is় যে জোশ ব্লচ সুপারিশ করেছেন, আপনি যদি সিঙ্গেলটন প্যাটার্নটি ব্যবহার করার জন্য জোর দিয়ে থাকেন তবে এটি প্রয়োগের সর্বোত্তম উপায় হল একটি একক উপাদান ব্যবহার করা enum(দেখুন: কার্যকর জাভা 2 য় সংস্করণ, আইটেম 3: একটির সাথে সিঙ্গেলটন সম্পত্তি প্রয়োগ করুন) প্রাইভেট কনস্ট্রাক্টর বা এনাম টাইপ ; থ্রেড সেফটি সিঙ্গলটনে )
==এবং মধ্যে পার্থক্য কি equals?
অনুস্মারক হিসাবে, এটি বলা দরকার যে সাধারণত, এটির পক্ষে ==কার্যকর একটি বিকল্প নয় equals। এটি যখন হয় (যেমন সহ enum), তখন দুটি গুরুত্বপূর্ণ পার্থক্য বিবেচনা করতে হবে:
== কখনও ছুড়ে না NullPointerException
enum Color { BLACK, WHITE };
Color nothing = null;
if (nothing == Color.BLACK); // runs fine
if (nothing.equals(Color.BLACK)); // throws NullPointerException
== সংকলন সময়ে উপযুক্ততা চেক টাইপ সাপেক্ষে
enum Color { BLACK, WHITE };
enum Chiral { LEFT, RIGHT };
if (Color.BLACK.equals(Chiral.LEFT)); // compiles fine
if (Color.BLACK == Chiral.LEFT); // DOESN'T COMPILE!!! Incompatible types!
==প্রযোজ্য হলে ব্যবহার করা উচিত ?
ব্লাচ নির্দিষ্টভাবে উল্লেখ করেছে যে অপরিবর্তনীয় শ্রেণিগুলির যেগুলির দৃষ্টান্তগুলির যথাযথ নিয়ন্ত্রণ রয়েছে তাদের ক্লায়েন্টদের গ্যারান্টি দিতে পারে ==যা ব্যবহারযোগ্য। enumউদাহরণস্বরূপ উদাহরণস্বরূপ উল্লেখ করা হয়।
আইটেম 1: নির্মাতাদের পরিবর্তে স্থির কারখানার পদ্ধতিগুলি বিবেচনা করুন
[...] এটি একটি অপরিবর্তনীয় শ্রেণিকে গ্যারান্টি তৈরি করতে দেয় যে কোনও দুটি সমান দৃষ্টান্ত উপস্থিত নেই: a.equals(b)যদি এবং কেবল যদি a==b। কোনও শ্রেণি যদি এই গ্যারান্টি দেয় তবে তার ক্লায়েন্টরা পদ্ধতির ==পরিবর্তে অপারেটরটি ব্যবহার করতে পারে equals(Object), যার ফলশ্রুতি উন্নত হতে পারে। এনাম ধরণের এই গ্যারান্টি সরবরাহ করে।
সংক্ষিপ্তসার হিসাবে, ব্যবহার ==করার জন্য যুক্তিগুলি হ'ল enum:
- এটা কাজ করে।
- এটা দ্রুত।
- রান-টাইমে এটি নিরাপদ।
- সংকলন সময়ে এটি নিরাপদ।