در زبان جاوا، اطمینان از این که متغیرها، پارامترها یا مقادیر بازگشتی null
نیستند، برای جلوگیری از خطاهای زمان اجرا مانند NullPointerException
بسیار مهم است. دو انوتیشن رایج به نامهای NotNull@
و Nonnull@
معمولاً برای این منظور استفاده میشوند، اما نقشها و زمینههای متفاوتی دارند. بیایید به تفاوتهای این دو انوتیشن بپردازیم:
انوتیشن NotNull@
(از پکیج jakarta.validation.constraints.NotNull
)
انوتیشن NotNull@
به طور گسترده در جاوا برای اهداف اعتبارسنجی استفاده میشود. زمانی که این انوتیشن را روی یک فیلد، پارامتر یا مقدار بازگشتی متد اعمال میکنید، مشخص میکنید که این مقدار هرگز نباید null
باشد. این موضوع بهویژه زمانی اهمیت پیدا میکند که با JavaBeans، اشیای انتقال داده (DTOs)، یا کلاسهای موجودیت (Entity Classes) کار میکنید.
قدرت واقعی NotNull@
زمانی ظاهر میشود که در کنار یک فریمورک اعتبارسنجی مانند Jakarta Bean Validation (قبلاً با نام JSR 303/JSR 380 شناخته میشد) استفاده شود. در زمان اجرا، این فریمورک بررسی میکند که آیا فیلد یا پارامتر انوتیشنشده null
است یا خیر. اگر مقدار null
باشد، یک استثنای اعتبارسنجی (Validation Exception) پرتاب میشود و از پردازش دادههای نامعتبر توسط برنامه جلوگیری میشود.
به بیان ساده، انوتیشن NotNull@
مطمئن میشود که مقدار فیلد، پارامتر یا مقدار بازگشتی خالی (null
) نباشد، مخصوصاً وقتی که بخواهیم اطلاعات کاربر را بررسی یا ذخیره کنیم.
بهعنوان مثال، کلاس User
را در نظر بگیرید:
در اینجا، انوتیشن NotNull@
تضمین میکند که مقدار username
نمیتواند null
باشد زمانی که شیء User
در حال اعتبارسنجی یا ذخیرهسازی است.
انوتیشن Nonnull@
(از پکیج jakarta.annotation.Nonnull
)
از طرف دیگر، انوتیشن Nonnull@
بیشتر برای بهبود کیفیت کد و جلوگیری از مشکلات مربوط به null
در مرحله توسعه استفاده میشود. وقتی Nonnull@
را به یک پارامتر متد، نوع بازگشتی یا یک فیلد اعمال میکنید، به توسعهدهندگان و ابزارهای تحلیل استاتیک میگویید که این مقدار هرگز نباید null
باشد.
برخلاف NotNull@
، انوتیشن Nonnull@
هیچ اعتبارسنجی در زمان اجرا انجام نمیدهد. در عوض، به IDEهایی مثل IntelliJ IDEA یا Eclipse کمک میکند که مشکلات احتمالی را در زمان توسعه تشخیص دهند. به عنوان مثال، اگر سعی کنید مقدار null
را به یک پارامتر با انوتیشن Nonnull@
ارسال کنید، IDE ممکن است یک هشدار یا خطا ایجاد کند و به شما این امکان را بدهد که مشکل را قبل از اجرای کد برطرف کنید.
مثال زیر را در نظر بگیرید:
در این مورد، انوتیشن Nonnull@
به توسعهدهنده و ابزارها اعلام میکند که مقدار username
هرگز نباید null
باشد، و این باعث کاهش احتمال وقوع خطای NullPointerException
میشود.
نکات کلیدی:
هدف: انوتیشن NotNull@
بیشتر برای اعتبارسنجی در زمان اجرا استفاده میشود تا از صحت دادهها در هنگام اجرای برنامه اطمینان حاصل شود. در مقابل، انوتیشن Nonnull@
بیشتر برای جلوگیری از مشکلات احتمالی مربوط به null
در زمان توسعه و با استفاده از تحلیل استاتیک به کار میرود.
تأثیر:
NotNull@
بر رفتار زمان اجرا تأثیر میگذارد.Nonnull@
کیفیت کد را در زمان کامپایل یا توسعه با ابزارهای کدنویسی بهبود میبخشد.زمان استفاده:
NotNull@
در مدلهای دادهای خود استفاده کنید زمانی که نیاز دارید مطمئن شوید برخی فیلدها یا پارامترها null
نیستند.Nonnull@
در امضای متدها یا نوعهای بازگشتی استفاده کنید تا عدم وجود null
را در زمان کدنویسی مستند و enforce کنید.نتیجه گیری:
هر دو انوتیشن NotNull@
و Nonnull@
ابزارهای مهمی در جعبهابزار یک توسعهدهنده جاوا هستند و هرکدام هدف خاص خود را دارند. با درک و استفاده صحیح از این دو، میتوانید کدی قویتر و مقاومتر در برابر خطا بنویسید و اطمینان حاصل کنید که مشکلات مربوط به null
چه در زمان اجرا و چه در زمان توسعه بهخوبی شناسایی و مدیریت میشوند.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید