Myslim, ze byste mohli byt az (ne)mile prekvapeni co vse se da inlinovat ... kouknete na http://www-128.ibm.com/developerworks/java/library/j-jtp12214/ a bude se divit ...

Oto Buchta wrote:
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.


--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic

Odpovedet emailem