যখন ভেরিয়েবল / প্যারামিটার শুধুমাত্র মূল্যবোধের সসীম সংখ্যা নিতে পারেন সঙ্গে কাজ করলেন, আমি সবসময় জাভার ব্যবহারের চেষ্টা enum
, হিসাবে
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
যতক্ষণ আমি আমার কোডের ভিতরে থাকি, ততক্ষণ তা ঠিকঠাক কাজ করে। তবে, আমাকে প্রায়শই অন্যান্য কোডের সাথে ইন্টারফেস করতে হবে যা একই উদ্দেশ্যে সাদামাটা int
(বা String
) মান ব্যবহার করে, বা আমাকে একটি ডাটাবেস থেকে / পাঠাতে / লিখতে হবে যেখানে ডেটা সংখ্যা বা স্ট্রিং হিসাবে সংরক্ষণ করা হয়।
সেক্ষেত্রে আমি প্রতিটি এনাম মানকে একটি পূর্ণসংখ্যার সাথে সংযুক্ত করার একটি সুবিধাজনক উপায় চাই, যেমন আমি উভয় উপায়ে রূপান্তর করতে পারি (অন্য কথায়, আমার একটি "বিপরীতমুখী এনাম" প্রয়োজন)।
এনাম থেকে ইন্টে যাওয়া সহজ:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
তারপরে আমি ইনট মানটি অ্যাক্সেস করতে পারি BonusType x = MONTHLY; int id = x.id;
।
যাইহোক, আমি বিপরীত জন্য কোনও ভাল উপায় দেখতে পাচ্ছি না, অর্থাত্ int থেকে enum যেতে। আদর্শভাবে, কিছু
BonusType bt = BonusType.getById(2);
আমি যে সমাধানগুলি নিয়ে আসতে পারলাম সেগুলি হ'ল:
- এনামের মধ্যে একটি অনুসন্ধানের পদ্ধতি রাখুন যা
BonusType.values()
"ইনট -> এনাম" মানচিত্রটি পূরণ করে, তারপরে এটি ক্যাশে করে এবং এটি দেখার জন্য ব্যবহার করে। কাজ করবে, তবে আমি ব্যবহার করা প্রতিটি এনামে এই পদ্ধতিটি অনুলিপি করতে হবে :-(। - স্ট্যাটিক ইউটিলিটি ক্লাসে লুকিং পদ্ধতিটি রাখুন। তারপরে আমার কেবল একটি "অনুসন্ধান" পদ্ধতি প্রয়োজন, তবে এটি একটি স্বেচ্ছাসেবীর এনামের জন্য কাজ করার জন্য প্রতিবিম্বের সাথে আমার বেড়াতে হবে।
উভয় পদ্ধতিই এ জাতীয় সাধারণ (?) সমস্যার জন্য মারাত্মক বিশ্রী মনে হয়।
অন্য কোন ধারণা / অন্তর্দৃষ্টি?
ordinal()
.ordinal()
), বা সেগুলি বাইরের বাহিনী দ্বারা সিদ্ধান্ত নেওয়া হয়?