Dobre praktyki programistyczne

Zamień null na Null Object

18.12.2011

Działanie ze zmiennymi mającymi potencjalnie wartość null wymaga często użycia warunku „if”. Aby pomóc programistom w tej sytuacji, napisałem klasę pomocniczą, która zwraca domyślny obiekt, gdy pojawi się wartość null. Użycie jest bardzo proste – umieść potencjalny null jako argument statycznej metody, a dostaniesz obiekt odpowiedniego typu, którego możesz użyć bez obawy o wystąpienie NullPointerException. To przykład wzorca projektowego Null Object.

Trzy przykłady użycia klasy NullPrevent, gdzie null jest zamieniany na domyślny obiekt:

  1. public class NullPreventMain {
  2.  
  3. public static void main(String[] args) {
  4. Map<String, String> map = getMap();
  5. System.out.println("Monday: " + NullPrevent.get(map.get("Monday")));
  6. // Prints only "Friday: "
  7. System.out.println("Friday: " + NullPrevent.get(map.get("Friday")));
  8.  
  9. for (int i = 0; i < 10; i++) {
  10. // Prints 0 if getInteger will return null
  11. System.out.println(NullPrevent.get(getInteger()).toString());
  12. }
  13.  
  14. String[] array = null;
  15. // Returns empty array - do nothing
  16. for (String s : NullPrevent.get(String.class, array)) {
  17. System.out.println(s);
  18. }
  19. }
  20.  
  21. /**
  22.   * Returns Map with translation of some days of week.
  23.   */
  24. private static Map<String, String> getMap() {
  25. Map<String, String> map = new HashMap<>();
  26. map.put("Monday", "lunes");
  27. map.put("Tuesday", "martes");
  28. return map;
  29. }
  30.  
  31. /**
  32.   * Returns random Integer or null.
  33.   */
  34. private static Integer getInteger() {
  35. Random random = new Random(System.nanoTime());
  36. return (random.nextInt(2) == 1) ? random.nextInt() : null;
  37. }
  38. }

Spójrz na kod źródłowy NullPrevent i pobierz go. Licencja ISC.

Leave a Response