рдЬрд╛рд╡рд╛ 8 рдореЗрдВ рдирдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрдХреНрд╖рд╛, NullPointerException рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ

рдЬрд╛рд╡рд╛ 8 рд░рд┐рд▓реАрдЬрд╝ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ NullPointerException



рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ Optional



рд╡рд░реНрдЧ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред



рдХрдИ рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ NullPointerException



рд╕рд╛рде рдорд┐рд▓реЗ, рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рд┐рдп рдЕрдкрд╡рд╛рдж рдХреЛрдб рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдЬрдЧрд╣, рдЖрдкрдХреЗ рдкреВрд░реНрд╡рд╡рд░реНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдк) рдиреЗ null



рд▓рд┐рдП рдХреБрдЦреНрдпрд╛рдд рдЪреЗрдХ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдерд╛ред



рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ null



рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЬрд╛рд╡рд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Optional



рд╕рд╛рде рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рджреГрд╢реНрдп рдмрди рдЬрд╛рддрд╛ рд╣реИред



рддреЛ, рд╣рдо рдЗрд╕ рдирд╡рд╛рдЪрд╛рд░ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред



рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ Optional



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:



 import java.util.Date; import java.util.Optional; public class Person { private Optional<String> firstName; private Optional<String> secondName; private Optional<Integer> age; private Optional<PersonAddress> address; public Optional<String> getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = Optional.ofNullable(firstName); } public Optional<String> getSecondName() { return secondName; } public void setSecondName(String secondName) { this.secondName = Optional.of(secondName); } public Optional<Integer> getAge() { return age; } public void setAge(Integer age) { this.age = Optional.ofNullable(age); } public Optional<PersonAddress> getAddress() { return address; } public void setAddress(PersonAddress address) { this.address = Optional.of(address); } }
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, "рд╕реЗрдЯ" рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдорд╛рдиреЛрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╣рдо Optional - of(), ofNullable())



рд╡рд░реНрдЧ Optional - of(), ofNullable())



рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ Optional



рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:



 /**  Optional  */ // Optional  Optional<Person> optionalPerson = Optional.empty(); //Optional     Optional<Person> optionalNonNull = Optional.of(somePerson); //Optional      Optional<Person> optionalNullable = Optional.ofNullable(somePerson);
      
      





рдирд┐рд░рд░реНрдердХ рдХреЛрдб рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдХреНрд╕рд░ null



рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдХреЛрдб рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓реЗрддреА рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рдФрд░ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рда рд╡рд┐рд╡рд░рдгред



рдЬрдм рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╢рд░реНрддреЗ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╡рд╕реНрддреБ null



рддреЛ рд╣рдореЗрдВ NullPointerException



рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ null



рд▓рд┐рдП рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╣рдореЗрдВ рдЙрд╕ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:



 Person person = getDefaultPerson(); if (person != null) { PersonAddress personAddress = person.getAddress(); if (personAddress != null) { PersonAddressStreet street = personAddress.getStreet(); if(street != null) { streetName = street.getStreetName(); } else { streetName = "EMPTY"; } } }
      
      





рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди Optional



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:



 String streetName = person.flatMap(Person::getAddress) .flatMap(PersonAddress::getStreet) .map(PersonAddressStreet::getStreetName) .orElse("EMPTY");
      
      





рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдпрд╣ рдирд╣реАрдВ рд╣реИ?



IfPresent () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ


ifPresent()



рд╡рд┐рдзрд┐ рднреА рдХреЛрдб рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдирд┐рдореНрди рд░реВрдк рдореЗрдВ:



  if(person != null) { System.out.println(person); }
      
      





рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛, рд▓реЗрдХрд┐рди Optional



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:



 person.ifPresent(System.out::println);
      
      





рдПрдХ рд╡рд╕реНрддреБ рдкрд░ рдХреНрд░рд┐рдпрд╛ред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ () рд╣реИ


isPresent()



рд╣рдореЗрдВ рдХреЛрдб рдЕрддрд┐рд░реЗрдХ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рд╛рдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдерд╛:



 if(person != null) { System.out.println(person) } else { System.out.println("Person not found!"); }
      
      





рд╡рд╣реА, рд▓реЗрдХрд┐рди Optional



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:



 if (person.isPresent()) { System.out.println(person.get()); } else { System.out.println("Person not found!"); }
      
      





OrElse (), orElseThrow () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреЛрдб рдореЗрдВ "рд╕реМрдВрджрд░реНрдп" рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рддрд░реАрдХреЗред



рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдерд╛:



 Person personNew = person != null ? person : new Person();
      
      





рд╡рд╣реА, рд▓реЗрдХрд┐рди Optional



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:



 Person personNew = person.orElse(new Person());
      
      





рдпрд╛, рдпрджрд┐ рдЖрдк рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ:



 Person personNewThrow = person.orElseThrow(Exception::new);
      
      





рдирд┐рд╖реНрдХрд░реНрд╖


рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ Optional



NullPointerException



рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рднреА null



рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Optional



рд╕рд╛рде рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рддреЗрдЬрд╝ рдФрд░ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдФрд░ рдЬрд╛рдБрдЪ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрдгрд┐рдд рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред



рдФрд░ рдпрд╣ рднреА, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, Optional



рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред



рдпрд╣ рдЗрд╕ рдирд╡рд╛рдЪрд╛рд░ рдХрд╛ рдореЗрд░рд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рд╣реИ, рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА:






All Articles