یک انوتیشن سفارشی @RunMe بسازید که برای متدها کاربرد دارد و یک کلاس runner بنویسید که با استفاده از Reflection همهٔ متدهای دارای این انوتیشن را در یک نمونهٔ مشخص پیدا و اجرا کند.
14.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 03:28 0.0
ابتدا انوتیشن را با @Retention(RetentionPolicy.RUNTIME) و @Target(ElementType.METHOD) تعریف کنید تا در زمان اجرا قابل مشاهده باشد، سپس یک یا چند متد نمونه را با این انوتیشن علامتگذاری کنید. برای اجرا از API بازتاب جاوا (java.lang.reflect) استفاده کنید: با Class.getDeclaredMethods() همهٔ متدها را بگیرید، با method.isAnnotationPresent(RunMe.class) آنهایی که انوتیشن دارند را فیلتر کنید و با method.invoke(obj) آنها را اجرا کنید. نکات: برای متدهای خصوصی از method.setAccessible(true) استفاده کنید، خطاهای InvocationTargetException و IllegalAccessException را هندل کنید و فرض کنید متدها بدون پارامترباشند یا برای پارامترها راهکاری ساده بیاورید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
مطمئن شوید انوتیشن را با @Retention(RetentionPolicy.RUNTIME) و @Target(ElementType.METHOD) تعریف کنید تا در زمان اجرا قابلتشخیص باشد. در Runner با Class.getDeclaredMethods() و method.isAnnotationPresent(RunMe.class) متدها را فیلتر کنید و برای متدهای خصوصی قبل از invoke مقدار method.setAccessible(true) را تنظیم نمایید. خطاهای InvocationTargetException و IllegalAccessException را لاگ یا هندل کنید و اگر متدها پارامتر دارند باید مکانیزمی برای تزریق آرگومانها یا بررسی امضاء پیادهسازی کنید. همچنین به ترتیب اجرای متدها و پیامدهای جانبی (state mutation) و مسائل امنیتی مانند SecurityManager یا اجرای کد ناشناخته توجه داشته باشید.
گزارش