enum Switch implements Action{
ONE{
void doAction(){}
}
TWO{
void doAction(){}
}
//...
}
Potem można zamiast switcha wywołać metodę doAction i jak nawet ktoś
coś dopisze to będzie musiał ta metodę napisać.
Z intów w switchach już od dawna nie korzystam.
Pozdrawiam
Bartek "Koziołek" Kuczyński
http://koziolekweb.pl
Lepiej pomyśleć dwa razy i zacząć programować
niż dwa razy programować i potem zacząć myśleć
\ /
~00~
\_/
|||
> --
> Otrzymujesz tę wiadomość, ponieważ subskrybujesz grupę dyskusyjną Google o nazwie "Warszawa Java User Group (Warszawa JUG)".
>
> Aby zamieszczać posty w tej grupie, wyślij e-mail na adres warsza...@googlegroups.com.
> Aby anulować subskrypcję tej grupy, wyślij e-mail na adres warszawa-jug...@googlegroups.com.
> Aby uzyskać więcej informacji, odwiedź tę grupę pod adresem http://groups.google.com/group/warszawa-jug?hl=pl.
>
>
Bartek ładnie napisał, że powinien nie przejść testów, co pewnie masz
zaimplementowe w validate(i).
Ze switcha nie korzystam (w webie w praktyce zawsze user podejmuje
decyzje, więc if'y są niepotrzebne, w integracji wolę obiektowość i
enumy) tym nie mniej, ponieważ lubię defensive programming, w
sytuacjach, które nie powinny wystąpić rzucam
ThingsThatShouldNotBeException. Jak wybuchnie, od razu wiadomo, że chaos
wkroczył do projektu ;)
NPE nie lubię.
--
Jakub Nabrdalik
http://solidcraft.eu
W przypadku enumów wyjątek. Jak ktoś coś dopisze po powinno nie
przejść testów. Chyba, że nowy enum jest odpowiednio rozpropagowany.
W przypadku intów zazwyczaj null object, albo nie robię nic i
użytkownik dostaje NPE. W ogóle switch to brzydkie rozwiązanie.
enum Switch implements Action{
ONE{
void doAction(){}
}
TWO{
void doAction(){}
}
//...
}
Potem można zamiast switcha wywołać metodę doAction i jak nawet ktoś
coś dopisze to będzie musiał ta metodę napisać.
Pozdrawiam
Bartek "Koziołek" Kuczyński
http://koziolekweb.pl
Lepiej pomyśleć dwa razy i zacząć programować
niż dwa razy programować i potem zacząć myśleć
\ /
~00~
\_/
|||
W dniu 4 lipca 2011 10:49 użytkownik Irek Matysiewicz
<iir...@gmail.com> napisał:
A co myślisz/-cie o dodaniu implementacji do doAction()? Warte
zachodu? (na chwilę obecną widzę zaletę, braku konieczności jej
tworzenia w enumach).
Jacek
--
Jacek Laskowski
Java EE, functional languages and IBM WebSphere - http://blog.japila.pl
Warszawa JUG conference = Confitura (formerly Javarsovia) :: http://confitura.pl
Swoją drogą należy też pamiętać, że dla końcowego odbiorcy naszego
kodu jedynym wyznacznikiem jakości jest poprawne działanie. Jeżeli
zatem za bardzo namieszamy w kodzie to będzie głównie nasz problem.
Pozdrawiam
Bartek "Koziołek" Kuczyński
http://koziolekweb.pl
Lepiej pomyśleć dwa razy i zacząć programować
niż dwa razy programować i potem zacząć myśleć
\ /
~00~
\_/
|||
warto jest zmienić miejsce walidowania zmienności enum-a:
final public class Test {
/**
* Matter for:
* @see #foo(MyEnum)
*/
static /* ensure proper enum*/ {
final MyEnum[] suported = new MyEnum[]{ MyEnum.Element001, ...
MyEnum.Element050};
//TODO exception if supported have different elements than
MyEnum.values()
}
> Uwaga:
> Dla małych enumów jest to jak najbardziej ok / dla większych typu:
>
>
> public static enum MyEnum {
> Element001,Element002, .... Element050;
> }
>
> public void foo(MyEnum e) {
> switch (e) {
> case Element001:
> ...
> break;
> case Element002:
> ...
> break;
> case Element025:
> case ....
> case Element050:
> /* just */ break;
> default:
> throw new IllegalArgumentException();
> }
> }
Śledząc tę dyskusję i próbując zmagać się z moim problemem, który
opisałem w innym wątku, mam nieodparte wrażenie, że jedynym
uzasadnieniem w/w podejścia mogłaby być jedynie sytuacja, w której nie
mamy możliwości zmiany enuma. Jeśli mamy, dodałbym metodę do enuma i
zrzuciłbym temat decyzji, co robić z danym enumem na jvm.
Ave,
On 7 Lip, 10:26, Irek Matysiewicz <iir...@gmail.com> wrote:
> Jak masz enuma z 50 elementami to na 99% masz coś nie tak w kodzie. :-)
Jeśli w rzeczywistości występuje 50 elementów to czemu enum nie miał
by ich tyle też zawierać?
>
> Fajnie by było tak łatwo rozwiązać ten problem, ale niestety tak nie jest:
> ten test zawiera copy&paste kodu z enuma (bierzesz wszystko z enuma i
> przenosisz do testu wewnątrz tablicy {...}). Testy, które są lustrzanym
> odbiciem kodu niewiele testują ('nie widzą' szerszego kontekstu) i są trudne
> w utrzymaniu (nawet najmniejsza nieistotna zmiana w kodzie wymaga zmian w
> teście).
Ja uważam to za plus(konieczność) / gdyż trzeba uważać żeby testy nie
były sprytniejsze od nas ;P
Także dziwi mnie logika według której nie można dodawać za dużo metod
do enuma za to można ignorować przy modyfikacji enuma metody bazujące
na liczbie elementów w enumie.
Tak, ale teraz jest to trudniejsze. W czasach C (albo lepiej Assemblera)
łatwiej było wypracować swój styl "optymalizacji" :).
Pozdrawiam
Marcin
--
http://solidsoft.wordpress.com/ - Working code is not enough
To są takie smaczki, które powodują, że jak czytasz kod to wiesz kto w
nim grzebał.
Tak swoją drogą to w tym przypadku można jeszcze połasić się na użycie
scalowych case classes.
Pozdrawiam
Bartek "Koziołek" Kuczyński
http://koziolekweb.pl
Lepiej pomyśleć dwa razy i zacząć programować
niż dwa razy programować i potem zacząć myśleć
\ /
~00~
\_/
|||
Jasne, swojego czasu robi�em regularne przegl�du kodu wielu os�b i
niekt�re konstrukcj�/podej�cia by�y naprawd� charakterystyczne (no mo�e
akurat podej�cia z "mikrotypami" nie spotka�em). Niemniej i tak og�lne
mo�liwo�ci w Javie, aby by� oryginalnym s� du�o mniejsze (chocia�
wspomniana tu Scala, czy Groovy znowu idďż˝ w tďż˝ stronďż˝ :) ).
Pozdrawiam
Marcin
>
> Tak swoj� drog� to w tym przypadku mo�na jeszcze po�asi� si� na u�ycie
> scalowych case classes.
>
> Pozdrawiam
> Bartek "Kozio�ek" Kuczy�ski
> http://koziolekweb.pl
> Lepiej pomy�le� dwa razy i zacz�� programowa�
> ni� dwa razy programowa� i potem zacz�� my�le�
> \ /
> ~00~
> \_/
> |||
>
>
>
> W dniu 8 lipca 2011 20:28 u�ytkownik Marcin Zaj�czkowski <msz...@wp.pl> napisa�:
>> On 2011-07-08 09:07, iirekm wrote:
>>> Ehh, ilu developer�w tyle podej�� do programowania. Jak z kim� pracujesz
>>> przez jaki� czas, to nawet bez zagl�dania do historii SVN-a z du�ym
>>> prawdopodobie�stwem mo�na powiedzie� kto to napisa�. :-)
>> Tak, ale teraz jest to trudniejsze. W czasach C (albo lepiej Assemblera)
>> �atwiej by�o wypracowa� sw�j styl "optymalizacji" :).
>>
>>
>> Pozdrawiam
>> Marcin
>>
>> --
>> http://solidsoft.wordpress.com/ - Working code is not enough
>>
>> --
>> Otrzymujesz t� wiadomo��, poniewa� subskrybujesz grup� dyskusyjn� Google o nazwie "Warszawa Java User Group (Warszawa JUG)".
>>
>> Aby zamieszcza� posty w tej grupie, wy�lij e-mail na adres warsza...@googlegroups.com.
>> Aby anulowa� subskrypcj� tej grupy, wy�lij e-mail na adres warszawa-jug...@googlegroups.com.
>> Aby uzyska� wi�cej informacji, odwied� t� grup� pod adresem http://groups.google.com/group/warszawa-jug?hl=pl.