Thread View: pl.comp.lang.java
8 messages
8 total messages
Started by Jacek Czerwinski
Sat, 04 Jun 2011 13:12
Ambitne zastosowanie enuma
Author: Jacek Czerwinski
Date: Sat, 04 Jun 2011 13:12
Date: Sat, 04 Jun 2011 13:12
16 lines
1270 bytes
1270 bytes
enum implementuje niebanalny interfejs. Z tego wspólnego pnia takich enumów jest więcej. Jak zrobić, aby 95% implementacji metod nie kopiować? Wymyśliłem wywoływanie kilku metod static Interfejsu, opłaca się gdy chodzi o objętościowo duże metody. Małych metod, geterów się nie da. Interfejs ze statycznymi i refleksja? Nie pytajcie dlaczego ;) taki DSL w javie. Pytania dodatkowe: Nie jest chyba w Javie możliwy enum (wewnętrzny dla klasy) bez nazwy? enum w enumie też się nie da?
Re: Ambitne zastosowanie enuma
Author: Marcin Biegan
Date: Sat, 04 Jun 2011 14:27
Date: Sat, 04 Jun 2011 14:27
39 lines
1618 bytes
1618 bytes
W dniu 2011-06-04 15:12, Jacek Czerwinski pisze:
> enum implementuje niebanalny interfejs.
>
> Z tego wspólnego pnia takich enumów jest więcej.
>
> Jak zrobić, aby 95% implementacji metod nie kopiować?
> Wymyśliłem wywoływanie kilku metod static Interfejsu, opłaca się gdy
> chodzi o objętościowo duże metody.
Może tak?
public enum Enum1{
A,
B;
private Enum1Impl impl;
Enum1(){
this.impl = new Enum1Impl();
}
public Enum1Impl get(){
return impl;
}
class Enum1Impl extends BaseEnumImpl{
public int getOrdinalSqr(){
return Enum1.this.ordinal() * Enum1.this.ordinal();
}
}
}
class BaseEnumImpl{
public void someMethod(){}
}
Enum1.A.get().someMethod();
Enum1.A.get().getOrdinalSqr();
--
pozdrawiam
Marcin Biegan
Re: Ambitne zastosowanie enuma
Author: Adam Byrtek
Date: Sun, 05 Jun 2011 17:36
Date: Sun, 05 Jun 2011 17:36
15 lines
1402 bytes
1402 bytes
On 06/04/2011 03:12 PM, Jacek Czerwinski wrote: > enum implementuje niebanalny interfejs. > > Z tego wspólnego pnia takich enumów jest więcej. > > Jak zrobić, aby 95% implementacji metod nie kopiować? > Wymyśliłem wywoływanie kilku metod static Interfejsu, opłaca się gdy > chodzi o objętościowo duże metody. Najlepsze rozwiązanie to po prostu nie używać enumów gdy mamy do czynienia z niebanalnym interfejsem. Enumy powinny być możliwie proste, więc gdy pojawia się w nich zbyt dużo logiki, to ewidentny "code smell". Pozdrawiam, Adam
Re: Ambitne zastosowanie enuma
Author: Jacek Czerwinski
Date: Mon, 06 Jun 2011 07:15
Date: Mon, 06 Jun 2011 07:15
30 lines
1715 bytes
1715 bytes
W dniu 2011-06-04 16:27, Marcin Biegan pisze:
> W dniu 2011-06-04 15:12, Jacek Czerwinski pisze:
>> enum implementuje niebanalny interfejs.
>>
...
>
> class Enum1Impl extends BaseEnumImpl{
> public int getOrdinalSqr(){
> return Enum1.this.ordinal() * Enum1.this.ordinal();
> }
> }
> }
>
> class BaseEnumImpl{
> public void someMethod(){}
> }
>
> Enum1.A.get().someMethod();
> Enum1.A.get().getOrdinalSqr();
>
Dzięki, ale na zwykłych klasach mój DSL wygląda przyjemniej, a o to
chodzi. Można powiedzieć, jesli ktoś 'wierzy' w istnienie takiego
wzorca, więc wzorzec enuma sprzez Javy 5.
Wbudowany enum ma bardzo duży power, ale i twarde granice swoich możliwości.
od kilku dni bawię się trickem
new Throwable() bez throw i stack trace
co mi załatwi 1-2 brzydkie parametry jakie musiał podawać tworzący kod
'aplikacyjny'.
Re: Ambitne zastosowanie enuma
Author: Jacek Czerwinski
Date: Mon, 06 Jun 2011 07:19
Date: Mon, 06 Jun 2011 07:19
19 lines
1755 bytes
1755 bytes
W dniu 2011-06-05 19:36, Adam Byrtek pisze: > On 06/04/2011 03:12 PM, Jacek Czerwinski wrote: >> enum implementuje niebanalny interfejs. >> >> Z tego wspólnego pnia takich enumów jest więcej. >> >> Jak zrobić, aby 95% implementacji metod nie kopiować? >> Wymyśliłem wywoływanie kilku metod static Interfejsu, opłaca się gdy >> chodzi o objętościowo duże metody. > > Najlepsze rozwiązanie to po prostu nie używać enumów gdy mamy do > czynienia z niebanalnym interfejsem. Enumy powinny być możliwie proste, > więc gdy pojawia się w nich zbyt dużo logiki, to ewidentny "code smell". W jakimś sensie się zgadzam. Założyłem sobie że użycie enuma ma być (bardzo) proste, być może realizując ambitny ukryty 'backend'. Wizja taka, że z fragmentami stosującymi gotowego enuma by miał się stykać ledwo przeszkolony z MS Basiców programista-wdrożeniowiec.
Re: Ambitne zastosowanie enuma
Author: Michal Kleczek
Date: Mon, 06 Jun 2011 12:45
Date: Mon, 06 Jun 2011 12:45
45 lines
1779 bytes
1779 bytes
Jacek Czerwinski wrote: > enum implementuje niebanalny interfejs. Jaki enum? Jakichs enum, ktory chcesz stworzyc? > > Z tego wspólnego pnia takich enumów jest więcej. Jakiego znowu pnia? > > Jak zrobić, aby 95% implementacji metod nie kopiować? Interfejs nie posiada implementacji. > Wymyśliłem wywoływanie kilku metod static Interfejsu, Interfejs nie moze posiadac metod statycznych. > opłaca się gdy > chodzi o objętościowo duże metody. > Dlaczego? Chłopie - wez naucz sie precyzyjnie wyrazac mysli, bo czytam powyzsze raz za razem i sensu w tym nie ma. To taki problem przestac uzywac skrotow myslowych, ktore tylko ty rozumiesz? Nic dziwnego, ze "agile" taka popularnosc zdobywa - inzynieria schodzi na psy, jesli w ogole jeszcze istnieje... > Pytania dodatkowe: > Nie jest chyba w Javie możliwy enum (wewnętrzny dla klasy) bez nazwy? > enum w enumie też się nie da? Do dokumentacji nie laska zajrzec? Albo moze przynajmniej sprobowac w jakims IDE - to zajmie nie wiecej niz 30s. -- Michal
Re: Ambitne zastosowanie enuma
Author: Adam Byrtek
Date: Mon, 06 Jun 2011 21:09
Date: Mon, 06 Jun 2011 21:09
9 lines
1147 bytes
1147 bytes
On 06/06/2011 02:45 PM, Michal Kleczek wrote: > Nic dziwnego, ze "agile" taka popularnosc zdobywa - inzynieria schodzi na > psy, jesli w ogole jeszcze istnieje... Tutaj z kolei ja sensu nie widzę. Może rozwiniesz te skróty myślowe? (Najlepiej w osobnym wątku.) Pozdrawiam, Adam
Re: Ambitne zastosowanie enuma
Author: jacek czerwinski
Date: Wed, 13 Jul 2011 09:19
Date: Wed, 13 Jul 2011 09:19
26 lines
2203 bytes
2203 bytes
On 5 Cze, 19:36, Adam Byrtek <adambyr...@gmail.com> wrote:
> On 06/04/2011 03:12 PM, Jacek Czerwinski wrote:
>
> Najlepsze rozwiązanie to po prostu nie używać enumów gdy mamy do
> czynienia z niebanalnym interfejsem. Enumy powinny być możliwie proste,
> więc gdy pojawia się w nich zbyt dużo logiki, to ewidentny "code smell".
Znalazlem co ciekawego, niby po enumie bylem przekonany, nie mozna
dziedziczyc (na sposob nazwany, ale anonimowy to owszem):
public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x / y; } };
// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}
http://download.oracle.com/javase/1,5.0/docs/guide/language/enums.html
I chyba to wykorzystam.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads