تسلسل Getters والتعامل مع NullPointerExceptions
عند إجراء سلسلة من استدعاءات getter لاسترداد البيانات من الكائنات المتداخلة، من الضروري إجراء عمليات فحص فارغة لتجنب NullPointerExceptions. يمكن أن يصبح هذا سريعًا مطولًا وغير مريح عند التعامل مع مستويات متعددة من الكائنات.
تداخل عبارات If
أحد الأساليب الشائعة هو تداخل عبارات if، والتحقق من كل كائن في سلسلة فارغة قبل المتابعة. ومع ذلك، يمكن أن تصبح هذه الطريقة غير عملية ويصعب صيانتها.
خرق قانون ديميتر (LoD)
هذا النهج ينتهك قانون ديميتر (LoD) ، والذي ينص على أن الأساليب يجب أن تستدعي فقط الأساليب الأخرى على الكائنات التي تشير إليها مباشرة. من خلال الوصول إلى الكائنات خارج سياقها المباشر، تنتهك هذه الطريقة تغليف الفئات المعنية.
استخدام اختياري (Java 8)
لحسن الحظ، قدمت Java 8 الفئة الاختيارية ، والتي توفر طريقة أكثر أناقة وأمانًا للتعامل مع القيم الخالية في سلاسل الحروف. يمثل الخيار الاختياري قيمة فارغة محتملة ويوفر طرقًا لتعيين القيمة التي يحتوي عليها وتصفيتها.
سلسلة الحروف مع اختياري. اختياري.ofNullable() على الكائن الأول في السلسلة. يؤدي هذا إلى إنشاء كائن اختياري يمثل القيمة أو القيمة الخالية. يمكنك بعد ذلك ربط عمليات Map() لتطبيق استدعاءات getter على القيمة، وسيقوم الاختياري بالتعامل مع عمليات التحقق الخالية تلقائيًا. .map(منزل -> house.getFloor(0)) .map(floorZero -> FloorZero.getWall(WEST)) .map(wallWest -> wallWest.getDoor()) .map(door ->door.getDoorknob());
السلامة والتغليف
Optional doorknob = Optional.ofNullable(house)
.map(house -> house.getFloor(0))
.map(floorZero -> floorZero.getWall(WEST))
.map(wallWest -> wallWest.getDoor())
.map(door -> door.getDoorknob());
الاستنتاج
في حين أنه قد يكون من الضروري في بعض الأحيان تنتهك حد LoD، فمن المستحسن عمومًا تجنب التداخل المفرط لعبارات if عند تسلسل الحروف. بدلاً من ذلك، فكر في استخدام الفئة الاختيارية للتعامل مع القيم الخالية بطريقة أكثر أناقة وأمانًا للكتابة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3