Java 8-де java.util
пакетінде жаңадан енгізілген Optional
класс бар. Бұл класс NullPointerException болдырмау үшін енгізілген, біз кодта нөлдік чектерді орындамасақ, жиі кездестіреміз. Бұл класс арқылы айнымалы мәннің нөлдік мәні бар-жоқтығын тексере аламыз және мұны NullPointerException болдырмауымыз мүмкін. Бұл нұсқаулықта қосымша класспен жұмыс істеу және осы сыныптың түрлі әдістерін қолдану әдістерін көреміз.
Қосымша класс мысалын көрмей тұрып, қосымша сыныпты пайдаланбасаңыз не нөлдік тексеру жүргізбейтін болсақ, не болатынын көруге мүмкіндік береді.
Java мысалы: Қосымша сыныпты пайдаланбастан
Бұл мысалда String жолына мән бермедік және біз оның ішкі жолын алуға тырысамыз. Кірісте ешқандай мән болмағандықтан, бағдарлама NullPointerException деп аталады.
public class Үлгі { public static void main (String [] арг) { String [] str = жаңа жол [10];// Субтитрді алу String str2 = str [9] .substring (2, 5); // Субтитрді көрсету System.out.print (str2); } }
Шығару:
«Негізгі» java.>Шешім: Қосымша класс пайдалану
Optional.ofNullable()
кластыңOptional.ofNullable()
әдісі берілген нысанда мән болса, бос емес қосымша мәнді қайтарады, әйтпесе ол бос емес мәнді қайтарады.
Қайтарылған опционды мәніisPresent()
әдісін пайдаланып бос немесе бос емес екенін тексере аламыз.// Міндетті емес сыныпты импорттау import java.util.Optional; public class Үлгі { public static void main (String [] арг) { String [] str = жаңа жол [10]; Қосымша <String> isNull = Қосымша.ofNullable (str [9]); if (isNull.isPresent ()) { // Субтитрді алу String str2 = str [9] .substring (2, 5); // Субтитрді көрсету System.out.print («Қосымша жол:» + str2); } басқа { System.out.println («Бос жолдан ішкі жолды алу мүмкін емес»); } str [9] = «AgraIsCool»; Қосымша <String> isNull2 = Қосымша.ofNullable (str [9]); егер (isNull2.isPresent ()) { // Субтитрді алу String str2 = str [9] .substring (2, 5); // Субтитрді көрсету System.out.print («Қосымша жол:» + str2); } басқа { System.out.println («Бос жолдан ішкі жолды алу мүмкін емес»); } } }Шығару:
Бос жолдан ішкі жолды алу мүмкін емес Субтитрлер: raIМысал: Қосымша isPresent () және vsPresent () әдістері
Жоғарыда келтірілген мысалда, біз
isPresent()
әдісін пайдалану арқылы, міндетті емес объектінің (немесе дананың) бос немесе бос болмайтынын тексере аламыз.
Факультативтік сыныпта ұсынылған басқа әдіс бар, ол тек осы Қосымша нысан бос болмаса ғана орындалады, әдісifPresent()
болып табылады. Айырмашылықты түсіну үшін мысалды көруге мүмкіндік береді.// Міндетті емес сыныпты импорттау import java.util.Optional; public class Үлгі { public static void main (String [] арг) { // String ішінен қосымша нысан жасау Қосымша <String> GOT = Міндетті емес. («Тақтың ойындары»); //Optional.empty () бос емес қосымша нысан жасайды Қосымша <String> ештеңе = қосымша.empty (); / * isPresent () әдісі: берілген Міндетті емес екенін тексереді * Объект бос немесе жоқ. * / егер (GOT.isPresent ()) { System.out.println («Thrones ойынын көру»); } басқа { System.out.println («Мен жұлынып жатырмын»); } / * ifPresent () әдісі: ол берілген Міндетті емес болса ғана орындалады * объект бос емес. * / // GOT бос емес болғанда бұл басып шығарылады GOT.ifPresent (s -> System.out.println («GOT көру - бұл қызықты!»)); // Бұл ештеңе бос болмағандықтан басып шығарылмайды nothing.ifPresent (s -> System.out.println («Мен бұйыруды ұнатамын»);} }Шығару:
Трондардың ойыны GOT көргеніңіз көңілді!Java 8 - Қосымша немесеElse () және orElseGet () әдістер
Бұл екі әдіс eitherElse () қарамастан немесе қарамастанElseGet () бос емес болса, қосымша объектінің мәнін қайтарады, егер нысан бос болса, онда бұл әдіске жіберілген әдепкі мәнді дәлел ретінде қайтарады.
// Міндетті емес сыныпты импорттау import java.util.Optional; public class Үлгі { public static void main (String [] арг) { // String ішінен қосымша нысан жасау Қосымша <String> GOT = Міндетті емес. («Тақтың ойындары»); //Optional.empty () бос емес қосымша нысан жасайды Қосымша <String> ештеңе = қосымша.empty (); // немесеElse () әдісі System.out.println (GOT.orElse («Әдепкі мән»)); System.out.println (nothing.orElse («Әдепкі мән»)); // немесеElseGet () әдісі System.out.println (GOT.orElseGet (() -> «Әдепкі мән»)); System.out.println (nothing.orElseGet (() -> «Әдепкі мән»)); } }Шығару:
Тақтар ойыны Әдепкі мән Тақтар ойыны Әдепкі мәнJava 8 - Optional.map және Optional.flatMap
Бұл мысалда карта мен пәтермен қалай жұмыс істейтінін көреміз.
// Міндетті емес сыныпты импорттау import java.util.Optional; public class Үлгі { public static void main (String [] арг) { // String ішінен қосымша нысан жасау Қосымша <String> GOT = Міндетті емес. («Тақтың ойындары»); //Optional.empty () бос емес қосымша нысан жасайды Қосымша <String> ештеңе = қосымша.empty (); System.out.println (GOT.map (String :: toLowerCase)); System.out.println (ештеңе.map (String :: toLowerCase)); Қосымша <Қосымша <Жол »anotherOptional = Міндетті емес. (Міндетті емес (BreakingBad)); System.out.println («Қосымша нысанның мәні» + anotherOptional); System.out.println («Optional.map:» + otherOptional.map (жыныс -> gender.map (String :: toUpperCase))); // Міндетті <Қосымша <Жол »-> flatMap -> Қосымша <String> System.out.println («Қосымша.flatMap:» + otherOptional.flatMap (жыныс -> gender.map (String :: toUpperCase))));} }Шығару:
Қосымша [ойын такталары] Қосымша Қосымша опцияның мәні Опциональный [Қосымша [BreakingBad]] Optional.map: Қосымша [Қосымша [BREAKINGBAD]] Қосымша: flatMap: қосымша [BREAKINGBAD]Мысал: Сүзгіге қосымша
Бұл мысалда факспен қалай жұмыс істейтінін көреміз. Сүзгілер туралы оқу үшін осы нұсқаулықты қараңыз: Java сүзгілері .
Сүзгілер бойынша қосымша сабақтар:// Міндетті емес сыныпты импорттау import java.util.Optional; public class Үлгі { public static void main (String [] арг) { // String ішінен қосымша нысан жасау Қосымша <String> GOT = Міндетті емес. («Тақтың ойындары»); / * Сүзгі бос болса, бос емес қосымша данасын қайтарады * кез-келген мәнді қамтыса, ол қосымша опцияны қайтарады * берілген мән. * / System.out.println (GOT.filter (s -> s.equals («GAME OF THRONES»))); System.out.println (GOT.filter (s -> s.equalsIgnoreCase («GAME OF THRONES»)));} }Шығару:
Қосымша Қосымша [Ойынның такталары]Әдебиеттер:
Java 8 - Қосымша сынып JavaDoc
Пікір қалдыру Жауапты