"উদাহরণস্বরূপ" অপারেশনগুলির একটি শৃঙ্খলা থাকা "কোড গন্ধ" হিসাবে বিবেচিত। মানক উত্তরটি হ'ল "পলিমারফিজম ব্যবহার করুন"। এই ক্ষেত্রে আমি এটি কীভাবে করব?
বেস ক্লাসের বেশ কয়েকটি সাবক্লাস রয়েছে; তাদের কেউই আমার নিয়ন্ত্রণে নেই। একটি সাদৃশ্যপূর্ণ পরিস্থিতি জাভা শ্রেণীর পূর্ণসংখ্যা, ডাবল, বিগডিসিমাল ইত্যাদির সাথে be
if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);}
else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);}
else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);}
নাম্বার স্টাফ ইত্যাদির উপর আমার নিয়ন্ত্রণ আছে।
আমি কোডের অনেকগুলি লাইন ব্যবহার করতে চাই না যেখানে কয়েকটি লাইন করত। (কখনও কখনও আমি ইন্টিজার স্টাফ, বিগডিসিমাল.ক্লাসের বিগডিসিমাল স্টফ ইত্যাদির উদাহরণ হিসাবে একটি হ্যাশম্যাপ ম্যাপিং ইন্টিজারক্লাস তৈরি করি তবে আজ আমি আরও সহজ কিছু চাই))
আমি এর মতো সহজ কিছু চাই:
public static handle(Integer num) { ... }
public static handle(BigDecimal num) { ... }
তবে জাভা ঠিক সেভাবে কাজ করে না।
ফর্ম্যাট করার সময় আমি স্থির পদ্ধতি ব্যবহার করতে চাই। আমি যে জিনিসগুলি ফর্ম্যাট করছি সেগুলি সম্মিলিত, যেখানে একটি থিং 1 এ অ্যারে থিং 2 এবং থিং 2 এ থিং 1 এর অ্যারে থাকতে পারে। আমি যখন আমার ফর্ম্যাটরগুলি এভাবে প্রয়োগ করি তখন আমার একটি সমস্যা হয়েছিল:
class Thing1Formatter {
private static Thing2Formatter thing2Formatter = new Thing2Formatter();
public format(Thing thing) {
thing2Formatter.format(thing.innerThing2);
}
}
class Thing2Formatter {
private static Thing1Formatter thing1Formatter = new Thing1Formatter();
public format(Thing2 thing) {
thing1Formatter.format(thing.innerThing1);
}
}
হ্যাঁ, আমি জানি হ্যাশম্যাপ এবং আরও কিছু কোডও এটি ঠিক করতে পারে। তবে "উদাহরণস্বরূপ" তুলনা করে এতটাই পঠনযোগ্য এবং বজায় রাখা যায় বলে মনে হয়। সরল কিন্তু দুর্গন্ধযুক্ত কিছু আছে কি?
নোট 5-10/2010 যোগ করা হয়েছে:
দেখা যাচ্ছে যে ভবিষ্যতে নতুন সাবক্ল্যাসগুলি সম্ভবত যুক্ত করা হবে এবং আমার বিদ্যমান কোডগুলিকে এগুলি নিখুঁতভাবে পরিচালনা করতে হবে। ক্লাসে হ্যাশম্যাপ কাজ করবে না কারণ ক্লাসটি খুঁজে পাওয়া যাবে না। যদি সুনির্দিষ্ট থেকে শুরু করে সর্বাধিক সাধারণের সাথে শেষ হয় তবে বিবৃতিগুলির একটি শৃঙ্খলা সম্ভবত সর্বোত্তম:
if (obj instanceof SubClass1) {
// Handle all the methods and properties of SubClass1
} else if (obj instanceof SubClass2) {
// Handle all the methods and properties of SubClass2
} else if (obj instanceof Interface3) {
// Unknown class but it implements Interface3
// so handle those methods and properties
} else if (obj instanceof Interface4) {
// likewise. May want to also handle case of
// object that implements both interfaces.
} else {
// New (unknown) subclass; do what I can with the base class
}
[text](link)
মন্তব্যগুলিতে লিঙ্ক পোস্ট করতে ব্যবহার করুন ।