Dnes Dagi narazil v mém kódu na použití třídy java.lang.Void
. Řekl jsem si, že se pochlubím i svým věrným čtenářům. Kdyby někdo z vás nevěděl, k čemu taková třída je, můžete si přečíst její JavaDoc.
The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.
Jasné jako facka. Pravděpodobně se s tímto typem setkáte při reflexi. Ale mnohem důležitější je použití v generikách. Často totiž narazíte v knihovnách na callbacky, které předpokládají, že chcete vrátit nějakou hodnotu. Například Springovský ConnectionCallback, který vypadá takto
public interface ConnectionCallback<T> { T doInConnection(Connection con) throws SQLException, DataAccessException; }
Je ale otázkou jak zvolit typ T
, pokud nechcete nic vracet. A zde právě přichází ke slovu java.lang.Void.
Můžu napsat například následující kód
template.execute(new ConnectionCallback<Void>() { @Override public Void doInConnection(Connection con) { //your code here //... return null; } });
Krása nesmírná. Na první pohled je jasné, co se tam děje. Jenom škoda, že musím napsat ten return null
.
V rámci objektivity musím přiznat, že to zas není tak důležité. Většinou se s podobným kódem potkáme u anonymních tříd, kde na tom návratovém typu zas tak nezáleží. Ale i tak je to takový pěkný detail, který se hodí znát.