Rozdíly mezi Java SE 6 a 7 (3)

Díl 3

Opětovné vyvolání výjimek

Navazujeme na minulý díl, ve kterém jsme shrnuli podtržítka, try-with-resources a AssertionError.


Jakmile zachytíte výjimku v bloku catch, je někdy vhodné tuto výjimku opětovně vyvolat. Tím výjimku zpracujete vhodnou metodou. Před Javou verze 7 však bylo možno v bloku catch vyvolat pouze výjimky základní třídy. Při deklaraci výjimky jste museli implementovat základní třídu výjimek. Nyní však můžete specifikovat své výjimky mnohem podrobněji.

Pro zopakování (vhodné pokud studujete na certifikaci OCA - Oracle Certified Associate).

Throwable a jeho roypad

Před Java verze 7:

Kód

static class FirstException extends Exception { }   
static class SecondException extends Exception { }   
 public void rethrowException(String exceptionName) throws Exception {   
  try {     
  if (exceptionName.equals("First")) {     
    throw new FirstException();   
    } else {    
     throw new SecondException();    
   }   
  } catch (Exception e) {   
    throw e;   
  }  
 }
 

Nově v Java verze 7:

Kód

public void rethrowException(String exceptionName)
  throws FirstException, SecondException {
     try { 
      // ...   
  }    
 catch (Exception e) {  
     throw e;   
  }  
 }

Použití operátoru diamant (Diamond Operator) u konstruktoru a @SuppressWarnings

Používání operátoru diamant (<>) zjednodušuje při vytváření objektu používání generik. Používání generik dělá z Javy jakožto statického programovacího jazyka hybrid, který se snaží stát dynamickým programovacím jazykem avšak snaží se zachovat přitom silnou typovou kontrolu.

V minulé verzi Javy se například spojový seznamy vytvářel jako tzv. Raw type:
List<String> list = new ArrayList();
Nebo se musel natvrdo typovat:
List<String> list = new ArrayList<String>();

Ve verzi 7 se elegantně vyhneme varování typu: unchecked or unsafe operations přidáním diamantu jako parametru. Tím říkáme překladači že ArrayList bude obsahovat prvny typu String.
List<String> list = new ArrayList<>();

Výhoda bude zřejmá u komplexnějších typů:

List<Map<String, List<String>> stringList = new ArrayList<>();

Tato nově zavedená funkce Javy 7 tedy šetří čas a čitelnost kódu. Pokud však přesto chcete použít raw type a nepoužít diamond operator, a nechcete zobrazit varování warning: unchecked, pak použijte anotaci verze 7: @SuppressWarnings.

Anotace @SafeVarargs

Když už jsme u těch anotací, nově přidaná anotace je i @SafeVarargs, zamezí zobrazování varování o nebezpečnosti proměnlivého počtu argumentů metodě či konstruktoru. Pokud metodě či konstruktoru předáváme jako parameter proměnlivý počet generik, je vhodné použít tuto anotaci.

Kód

import java.util.ArrayList;

public class SafeVargExample {
    
public static void main(String[] args) {
}

@SafeVarargs
public static <T> void displayElements(T... array) {
    for (T element : array) {
    System.out.println(element.getClass().getName() + ": "
    + element);
    }
  }
}

V příštím díle probereme Paths a knihovnu java.nio.*








Doporučujeme