এখানে সর্বোত্তম পন্থা ভিজিটর প্যাটার্নটি ক্লাসে এবং সমস্ত সুপার ক্লাসের সমস্ত ক্ষেত্র সন্ধান করে এবং তাদের উপর একটি কলব্যাক ক্রিয়া সম্পাদন করে।
বাস্তবায়ন
বসন্তে একটি দুর্দান্ত ইউটিলিটি ক্লাস রয়েছে ReflectionUtils
যা কেবল এটি করে: এটি একটি কলব্যাকের সাহায্যে সমস্ত সুপার ক্লাসের সমস্ত ক্ষেত্রের লুপ করার একটি পদ্ধতি নির্ধারণ করে:ReflectionUtils.doWithFields()
ডকুমেন্টেশন:
টার্গেট ক্লাসের সমস্ত ক্ষেত্রে প্রদত্ত কলব্যাকটি আহ্বান করুন, সমস্ত ঘোষিত ক্ষেত্রগুলি পেতে ক্লাসের শ্রেণিবিন্যাসে উঠে যান।
পরামিতি:
- ক্লজ - বিশ্লেষণের লক্ষ্য শ্রেণি
- এফসি - প্রতিটি ক্ষেত্রের জন্য কলব্যাক
- এফএফ - ফিল্টার যা কলব্যাক প্রয়োগ করতে ক্ষেত্রগুলি নির্ধারণ করে
কোডের উদাহরণ:
ReflectionUtils.doWithFields(RoleUnresolvedList.class,
new FieldCallback(){
@Override
public void doWith(final Field field) throws IllegalArgumentException,
IllegalAccessException{
System.out.println("Found field " + field + " in type "
+ field.getDeclaringClass());
}
},
new FieldFilter(){
@Override
public boolean matches(final Field field){
final int modifiers = field.getModifiers();
// no static fields please
return !Modifier.isStatic(modifiers);
}
});
আউটপুট:
পাওয়া ক্ষেত্র ব্যক্তিগত অস্থায়ী javax.management.relation.RoleUnresolvedList.typeSafe বুলিয়ান টাইপ বর্গ javax.management.relation.RoleUnresolvedList মধ্যে
javax.management.relation.RoleUnresolvedList.tainted বুলিয়ান পাওয়া ক্ষেত্র ব্যক্তিগত অস্থায়ী টাইপ বর্গ javax.management.relation.RoleUnresolvedList মধ্যে
পাওয়া ক্ষেত্র প্রাইভেট ট্রান্সিয়েন্ট জাভা.আলং.অবজেক্ট [] java.util.ArrayList.elementData টাইপ ক্লাসে java.util.ArrayList
ফিল্ড প্রাইভেট ইন্ট java.util.ArrayList.size টাইপ শ্রেণিতে java.util.ArrayList
পাওয়া ক্ষেত্র সুরক্ষিত ক্ষণস্থায়ী জাভা জাভা। java.util.AbstractList টাইপ শ্রেণিতে use.AbstractList.modCount