středa 19. října 2011
úterý 18. října 2011
Validace vstupních parametrů metod.
Všechny vstupní parametry metod je vhodné validovat na jejich korektnost dříve než se s nimi začne pracovat.
V 90% případů mi stačí zkontrolovat, že vstupní parametr není
Joshua Bloch radí vyhodit
Kód by mohl vypadat třeba takto
První možností je třída
V 90% případů mi stačí zkontrolovat, že vstupní parametr není
null
.Joshua Bloch radí vyhodit
NullPointerException
, ale já, a troufám si tvrdit že i velká část java komunity, preferuje IllegalArgumentException
.Kód by mohl vypadat třeba takto
public void foo(final String request) { if (request == null) { throw new IllegalArgumentException("Parameter 'request' can't be null."); } }Protože nejsem na světě sám, co potřebuje validovat vstupní parametry, existuje spousta knihoven, které lze pro tyto účely využít (psát vlastní validační knihovnu považuji jen za zvyšování chaosu ve vesmíru).
První možností je třída
org.apache.commons.lang.Validate
z knihovny Apache Commons Lang.
public void foo(final String request) { Validate.notNull(request, "Parameter 'request' can't be null."); }Místo původních třech řádků jen jeden. Na skoro všech projektech ale používám i Spring, tak proč nepoužít třídu
org.springframework.util.Assert
, která je hodně podobná org.apache.commons.lang.Validate
?
public void foo(final String request) { Assert.notNull(request, "Parameter 'request' can't be null."); }Samotní autoři nedoporučují použít tuto třídu! Citace z javadocu:
Mainly for internal use within the framework; consider Jakarta's Commons Lang >= 2.0 for a more comprehensive suite of assertion utilities.Další možnou variantou je knihovna Guava.
public void foo(final String request) { Preconditions.checkNotNull(request, "Parameter 'request' can't be null."); }Na té se mi ale nelíbí, že vyhazuje
NullPointerException
a varianta checkArgument
, která vyhazuje IllegalArgumentException
má vytaženou podmínku ven z metody, čímž se kontrola lehce komplikuje. public void foo(final String request) { Preconditions.checkArgument(request != null, "Parameter 'request' can't be null."); }Já osobně zůstanu u třídy
Validate
.
Jak validujete parametry metod vy?
Přihlásit se k odběru:
Příspěvky (Atom)