ورود

View Full Version : @Nullable و @NotNull چیستند و کجاها کاربرد دارند



tux-world
شنبه 24 مرداد 1394, 16:38 عصر
سلام. از اینها تو سورسهایی که مطالعه میکردم جاهایی دیدم ولی نفهمیدم کاربردشون چی هستش و چرا باید ازشون استفاده کرد و دلیل استفاده و اهمیت کاربرد اونها چی هستش. از دوستان این مورد رو هم خواهش میکنم لطف کنند راهنمایی کنند

محمد فدوی
یک شنبه 25 مرداد 1394, 03:11 صبح
اینا دوتا اصلاحگر هستن که صرفا برای افزایش خوانایی کد کاربرد دارن. البته فقط یه پیاده‌سازی از این دوتا اصلاحگر وجود نداره و تو خیلی از پکیج‌ها می‌تونی پیداشون کنی: لینک (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use)
البته بعضا IDEها هم امکاناتی رو در این موارد اضافه کردن که می‌تونی مستندات IDEت رو بخونی.

یه مثال از کاربرد این اصلاحگرها:
import java.util.Objects;

final class SimpleLogger {
private SimpleLogger() {}

public static void logNotNull(@NotNull Object obj) {
System.out.println(Objects.requireNonNull(obj, "Field `obj` must not be null."));
}

public static void logNullable(@Nullable Object obj) {
System.out.println(obj);
}
}
استفاده:
public static void main(String[] args) {
SimpleLogger.logNullable("I'm annotated by @Nullable");
SimpleLogger.logNullable(null);

SimpleLogger.logNotNull("I'm annotated by @NotNull");
SimpleLogger.logNotNull(null);
}
اینم (https://www.jetbrains.com/idea/help/nullable-and-notnull-annotations.html) ببین.

ویرایش:
پیشنهاد می‌کنم به جای اصلاحگر NotNull از متد requireNonNull در کلاس java.util.Objects استفاده کنی:
Object notnull = Objects.requireNonNull(obj, "Obj is NULL :|");
و به جای اصلاحگر Nullable هم از کلاس java.util.Optional استفاده کنی که البته توی جاوا۸ اضافه شده. لینک (http://www.tutorialspoint.com/java8/java8_optional_class.htm)