یک Annotation سفارشی به نام @Todo بسازید که متن کار و سطح اهمیت را نگهداری کند و سپس با استفاده از Reflection متدهای یک کلاس را اسکن کرده و برای هر متد دارای این Annotation متن و سطح اهمیت را چاپ کنید.

9.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:19

0.0

برای حل این مسئله ابتدا یک Annotation با @Retention(RetentionPolicy.RUNTIME) و @Target(ElementType.METHOD) تعریف کنید و فیلدهایی مانند String value() و int priority() (با مقدار پیش‌فرض) اضافه کنید؛ سپس چند متد نمونه را با این Annotation علامت‌گذاری کنید. برای خواندن Annotationها از API بازتاب (java.lang.reflect) استفاده کنید: با گرفتن کلاس هدف، با getDeclaredMethods() روی متدها حلقه بزنید و با isAnnotationPresent() و getAnnotation() اطلاعات را استخراج و چاپ کنید. نکته‌ها: حتما Retention را روی RUNTIME بگذارید تا Annotation هنگام اجرا قابل دسترسی باشد و از import های java.lang.reflect.Method و java.lang.annotation.* استفاده کنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:19
دسته بندی ها: Java Java for beginner
arash در 202 روز قبل ساعت 10:07

نکته مفید: برای دسترسی به مقادیر Todo در زمان اجرا، حتما Retention(RUNTIME) و Target(METHOD) را تنظیم کنید و با استفاده از getAnnotation(Todo.class) مقادیر text و priority را چاپ کنید. اگر برخی متدها خصوصی هستند، باید با setAccessible(true) دسترسی پیدا کنید یا از getMethods استفاده کنید تا به متدهای عمومی ارث‌برده دسترسی داشته باشید. تفاوت بین getDeclaredMethods و getMethods را در نظر بگیرید: اگر می‌خواهید فقط متدهای تعریف‌شده در کلاس جاری را بخوانید از getDeclaredMethods استفاده کنید و اگر به ارث‌برده‌ها هم نیاز دارید از getMethods استفاده کنید. برای پایداری خروجی، مقدار پیش‌فرض priority را در annotation تعیین کنید تا بدون annotation هم کدی که چاپ می‌کند رفتار قابل پیش‌بینی داشته باشد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری