জাভা প্রতিবিম্ব বেশ শক্তিশালী এবং খুব দরকারী হতে পারে। জাভা প্রতিবিম্ব সংকলনের সময় ক্লাসের নাম, পদ্ধতি ইত্যাদি না জেনে রানটাইমের সময় ক্লাস, ইন্টারফেস, ক্ষেত্র এবং পদ্ধতিগুলি পরীক্ষা করা সম্ভব করে তোলে । নতুন অবজেক্ট ইনস্ট্যান্টিয়েট করা, পদ্ধতিগুলি আহ্বান করা এবং প্রতিবিম্বটি ব্যবহার করে ক্ষেত্রের মানগুলি নির্ধারণ / সেট করাও সম্ভব ।
প্রতিচ্ছবি ব্যবহার করে দেখতে কেমন তা দেখানোর জন্য একটি দ্রুত জাভা প্রতিবিম্বের উদাহরণ:
Method[] methods = MyObject.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
}
এই উদাহরণটি ক্লাস থেকে মাইওবজেক্ট নামে ক্লাসের অবজেক্টটি গ্রহণ করে। শ্রেণীর অবজেক্টটি ব্যবহার করে উদাহরণটি সেই শ্রেণীর পদ্ধতিগুলির একটি তালিকা পায়, পদ্ধতিগুলি পুনরাবৃত্তি করে এবং তাদের নাম মুদ্রণ করে।
ঠিক কিভাবে এই সমস্ত কাজ এখানে ব্যাখ্যা করা হয়
সম্পাদনা : প্রায় 1 বছর পরে আমি এই উত্তরটি সম্পাদনা করছি প্রতিচ্ছবি সম্পর্কে পড়ার সময় আমি প্রতিবিম্বের আরও কয়েকটি ব্যবহার পেয়েছি।
- বসন্ত শিমের কনফিগারেশন ব্যবহার করে যেমন:
<bean id="someID" class="com.example.Foo">
<property name="someField" value="someValue" />
</bean>
যখন বসন্তের প্রসঙ্গটি এই <বিন> উপাদানটি প্রক্রিয়া করে, তখন ক্লাসটি ইনস্ট্যান্ট করার জন্য "com.example.Foo" যুক্তি সহ Class.forName (স্ট্রিং) ব্যবহার করবে।
এরপরে এটি <সম্পত্তি> উপাদানটির জন্য উপযুক্ত সেটার পেতে প্রতিবিম্বটি ব্যবহার করবে এবং এর মানটিকে নির্দিষ্ট মানটিতে সেট করবে।
- জুনিট বিশেষত ব্যক্তিগত / সুরক্ষিত পদ্ধতিগুলির পরীক্ষার জন্য প্রতিচ্ছবি ব্যবহার করে।
ব্যক্তিগত পদ্ধতিগুলির জন্য,
Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
ব্যক্তিগত ক্ষেত্রের জন্য,
Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);