Ahoj,
co parametrizovat i HVisitable a teprve v okamziku, kdy budu implementovat
rozhrani HVisitable tak reknu jakym typem
(velmi pravdepodobne sam sebou):
public interface HVisitable<E extends HVisitable> {
boolean accept(HVisitor<E> visitor);
}
public class HVisitableImpl implements HVisitable<HVisitableImpl> {
...
}
Jirka
Lukáš Zapletal napsal(a):
> Zdravim,
>
> mam jeden problemek ohldedne parametrizace objektu. Predstavme si
> nasledujici situaci klasickeho hiearchickeho visitor patternu:
>
> public interface HVisitor<E extends HVisitable> {
>
> boolean visitEnter(E node); // going into a branch
>
> boolean visitLeave(E node); // coming out
>
> boolean visit(E node);
>
> }
>
> public interface HVisitable {
> boolean accept(HVisitor visitor);
> }
>
> Rozhrani HVisitor je parametrizovano, aby programator pouhou deklaraci
> typu E mohl implementovat primo metody pracujici s danym typem a
> nemusel by pretypovavat. Problem je u rozhrani HVisitable, kde me
> prekladac u metody accept varuje, ze by mela byt parametrizovana. No
> to da rozum, ovsem ja nemohu prijit na to, jak ji parametrizovat.
> Ackoli je kod funkcni, ta varovani mi vrtaji hlavou. Potreboval bych
> dat programatorovi moznost specifikovat visitable typ parametrem, ale
> vznika tam "cyklus", protoze HVisitor ve sve deklaraci pouziva
> HVisitable.
>
> Mam takovy pocit, ze v reseni budou hrat hlavni roli parametricke zoliky :-)
>
> Diky za nakopnuti
>
--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic