On Tuesday 24 of January 2006 08:54, Pavel Kolesnikov wrote:
> On 24/01/06, Šilhánek Miloš <[EMAIL PROTECTED]> wrote:
> > Kompilátor asi inlining neudělá, ale runtime zjistí, že nemusí dělat
> > dynamický binding. Pozná to podle toho, že třída nemá podtřídu, kde by
> > byla metoda překryta A vnitřek metody je dostatečně krátký.
> >
> > Inlining lze podpořit deklaraci metody jako final.
> > To si ale musíte rozmyslet napřed, protože v budoucnu si znemožníte ze
> > třídy dědění.
>
> Tady mam malou praktickou poznamku - problem je podle mne prave opacny.
>
> Pokud v budoucnu zjistite potrebu z vasi tridy dedit, proste vydate
> novou verzi,
> ktera uz ma deklaraci final odstranenu. V opacnem pripade, pokud zjistite,
> ze deditelnost tridy nebyla az tak dobry napad, byste pozdejsim dodanim
> sluvka final mohl rozbourat mnozstvi existujicich aplikaci.
>
> Tim ale samozrejme nenaznacuju, ze by vse melo byt deklarovano final :-)

No, mozna jsem uplne mimo misu, ale principialne v zadnem jazyce nemuze 
prekladac udelat inlinovat protected a public metodu, kdezto u private to 
udelat muze ;-) A staci na to trivialni preprocesor, ktery ma na inlining 
treba Idea.
Totez plati pro runtime. A deklarace metody jako final v tom nema naprosto 
zadny vyznam. proste bud 
je metoda zvenku prostupna=>nesmi byt inlinovana
metoda zvenku pristupna neni=>cokoli muze inlinovat

Deklarovat metody jako final je zhuverilost, ktera mne osobne vadi i u Stringu 
(jednou jsem potreboval String owrapovat diky demenci jednoho API, ktere 
zralo jenom Stringy a ja tam potreboval dostat multijazycny "StringChooser". 
Skoda, ze CharSequence neni vice pouzivany...), a ktera by se mela delat co 
nejmene. Musite si byt setsakra jisti, ze ten final ma nejaky vyznam.

-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com

Odpovedet emailem