Nejde ani tak o viditelnost metody, ale o to, zda je metoda součástí API.
Klíčové slovo assert kontroluje podmínku, o které je programátor
přesvědčen, že platí. Motivací pro používání assert je snaha dozvědět se
co nejdříve o tom, že je něco špatně. Použití má smysl tam, kde sám píšu
metodu i volání (nebo já píšu metodu a kolega z týmu volání).
Naproti tomu výjimka IllegalArgumentException slouží k informování
volájícího, že zavolal metodu s nesprávnými argumenty. Hodí se tam, kde
jde o metodu API, které bude přístupné někomu z vnějšku (tj. mimo systém).

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague


Ondra Medek napsal(a):
>> Aserce kontroluji, zda modul dostava spravne vstupy a jeho stav je
>> korektni. Je to takova velmi omezena varianta Design by Contract.
>> Nemely by se pouzivat na overovani vstupu od uzivatele, jen na obranu
>> pred programatorskymi chybami.
>> Typicke pouziti:
>> Scitac je napsan jen pro nezaporna cisla. To je popsano v dokumentaci.
>> Na jeho zacatku se assertem overi, ze cisla skutecne nejsou zaporna.
>> Pokud by ho nejaky programator pouzil spatne, brzy se to dozvi.
>> (Otazkou je, zda trebas tady radeji nepouzit InvalidArgumentException,
>> hranice je neostra.)
>
> Java assert se nema pouzivat na kontrolu parametru public metod, viz
> http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#usage-conditions
> Asi protoze ten assert se ma na produkci vypinat.
>
> Misto toho treba Spring ma Assert tridu:
> http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/util/Assert.html
> (A ja si taky kdysi jednu vyrobil:
> http://xmedeko.blogspot.com/2010/12/java-simple-assert-class-for-design-by.html)
>

Odpovedet emailem