আমি এরকম কিছু করতে চাই:
List<Animal> animals = new ArrayList<Animal>();
for( Class c: list_of_all_classes_available_to_my_app() )
if (c is Animal)
animals.add( new c() );
সুতরাং, আমি আমার অ্যাপ্লিকেশনটির মহাবিশ্বের সমস্ত শ্রেণীর দিকে নজর রাখতে চাই এবং যখন আমি প্রাণী থেকে নেমে আসা একটি আবিষ্কার করি তখন আমি সেই ধরণের একটি নতুন অবজেক্ট তৈরি করে তালিকায় যুক্ত করতে চাই। এটি আমাকে জিনিসের একটি তালিকা আপডেট না করেই কার্যকারিতা যুক্ত করতে দেয়। আমি নিম্নলিখিতটি এড়াতে পারি:
List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...
উপরোক্ত পদ্ধতির সাহায্যে আমি কেবলমাত্র একটি নতুন ক্লাস তৈরি করতে পারি যা অ্যানিমাল প্রসারিত করে এবং এটি স্বয়ংক্রিয়ভাবে উঠতে পারে।
আপডেট: 10/16/2008 9:00 am প্যাসিফিক স্ট্যান্ডার্ড সময়:
এই প্রশ্নটি অনেক দুর্দান্ত প্রতিক্রিয়া তৈরি করেছে - আপনাকে ধন্যবাদ। প্রতিক্রিয়া এবং আমার গবেষণা থেকে, আমি খুঁজে পেয়েছি যে আমি যা করতে চাই তা জাভার অধীনে সম্ভব নয়। এমন পদ্ধতি রয়েছে যেমন ডিডিমিট্রভের সার্ভিস লোডার প্রক্রিয়া যা কাজ করতে পারে - তবে আমি যা চাই তার জন্য এগুলি অত্যন্ত ভারী এবং আমি বিশ্বাস করি যে আমি জাভা কোড থেকে কোনও সমস্যাটি কেবল একটি বাহ্যিক কনফিগারেশন ফাইলে সরিয়ে নিয়েছি। 5/10/19 আপডেট করুন (11 বছর পরে!) এখন অনেকগুলি লাইব্রেরি রয়েছে যা @ ইভাননিকের উত্তর অনুসারে এর সাথে সহায়তা করতে পারে org.refferences ভাল দেখাচ্ছে। এছাড়াও ClassGraph @Luke হাচিসন থেকে উত্তর দেখতে ভালই লাগছে। উত্তরের পাশাপাশি আরও বেশ কয়েকটি সম্ভাবনা রয়েছে।
আমি যা চাই তা জানার আর একটি উপায়: আমার অ্যানিম্যাল ক্লাসে একটি স্ট্যাটিক ফাংশন এমন সব শ্রেণীর সন্ধান করে এবং তা ইনস্ট্যান্ট করে যা কোনও পরবর্তী কনফিগারেশন / কোডিং ছাড়াই। আমার যদি কনফিগার করতে হয় তবে আমি তাদের পাশাপাশি কেবলমাত্র প্রাণী ক্লাসে ইনস্ট্যান্ট করতে পারি। আমি বুঝতে পেরেছি যে একটি জাভা প্রোগ্রামটি কেবল ক্লাস ফাইলগুলির একটি looseিলে .ালা ফেডারেশন।
মজার বিষয় হল এটি সি # তে মোটামুটি তুচ্ছ ।