Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 11.02.09 Prihlásený: 15.01.25 Príspevky: 2208 Témy: 145 | 145 Bydlisko: Liptovský M... |
Nejak nemozem pochopit jedno: Kód: Objekt obj = new Objekt() { ...prikazy... } Co znamena takato syntax, kedy sa vlastne spusti ten kod v { } ? Konkretne som to videl tu: Kód: Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override public void run() { // Your database code here } }, 1000); Vytvori sa novy objekt timer, vola sa jeho metoda shedule(), ktora ma ako parameter novy objekt TimerTask() a za nim spominane { } s nejakym kodom. Ten sa ako vykonava kedy?
_________________ "Only a warrior chooses pacifism, others are condemned to it." - unknown author |
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
Ten zapis je zhruba ekvivalentny tomuto: Kód: class Temporary extends TimerTask { @Override public void run() { // your code here // } Temporary() { super(); } }
timer.schedule(new Temporary());
Pouziva sa najma vtedy, ked mas nejaku class-u ktora ti robi vsetko co ma, ale potrebujes v nej jednorazovo zmenit nejaku metodu. Vtedy nema zmysel pomenovavat takto pozmenenu class-u, takze moze ostat anonymna. Ine pouzitie je na simulaciu anonymnych funkcii (lambda funkcie), kedze Java ich dostala az nedavno vo verzii 8. Anonymne funkcie sa v roznych jazykoch zvyknu pouzivat vtedy, ked potrebujes predat funkciu ako argument k inej funkcii a ta funkcia, ktoru predavas ako argument sa nevola nikde inde (tj. nema zmysel ju ukladat / pomenuvat). Vacsinou pri robeni roznych callback-ov, ako napr. pri Timer-och, Event Listener-och apod.
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 11.02.09 Prihlásený: 15.01.25 Príspevky: 2208 Témy: 145 | 145 Bydlisko: Liptovský M... |
Aha, a co robi ta metoda: temporary () { super();}. Spusta konstruktor nadradenej triedy TimerTask?
_________________ "Only a warrior chooses pacifism, others are condemned to it." - unknown author |
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
hej.. (teda v principe naznacujem ze s konstruktorom sa nic nestane, neviem z hlavy ci v Jave musi mat podtrieda vlastny konstruktor alebo nie)
v principe ide o to, ze pocas vytvorenia objektu si ho mozes "on-the-fly" trocha pozmenit (upravit mu jednu / viac funkcii) tak aby ti vyhovoval.. a tieto zmeny funguju uplne rovnako ako keby si si z toho objektu vytvoril extended class-u, a zapisal do tych kuceravych zatvoriek jej telo, vytvoril objekt tej extended class-y, priradil ho do referencie typu nadradenej class a zabudol na to, ako si tu rozsirenu class povodne pomenoval.
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 11.02.09 Prihlásený: 15.01.25 Príspevky: 2208 Témy: 145 | 145 Bydlisko: Liptovský M... |
A co keby to tam nebolo a bola by tam len metoda run?
btw. ak nema podtrieda vlastny konstruktor tak sa automaticky vola konstruktor nadradenej triedy - niekde som to cital.
_________________ "Only a warrior chooses pacifism, others are condemned to it." - unknown author |
|
Registrovaný: 15.01.07 Prihlásený: 23.09.15 Príspevky: 186 Témy: 3 | 3 Bydlisko: ZV/BA |
keby si tam strelil len telo metody ako objekt donutra, asi by to nebolo velmi cool, nie? telo metody nemoze byt objekt samo o sebe IBA AK nahodou nepouzivas java 8cku a ako uz spominal kolega vyssie, funcionalne interfaces ako Runnable sa daju uz pouzivat na lambda vyrazy a teda je uz mozne napchat cisto anonymnu metodu do tela metody (zda sa, ze oracle ide pomalicky tahat javu kusok k funkcionalnemu programovaniu)
_________________ nb: Lenovo Thinkpad E520 (starsi pan uz), Fedora 20 / Win7 dualboot " 1000.times { puts "I will not spam on the boards" } " |
|
Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
 | v Redakčné systémy | 4 | 637 | 10.12.2006 16:30 KillerSVK |  | v PHP, ASP | 2 | 649 | 22.08.2011 10:36 camo |  | v Pevné disky a radiče | 3 | 582 | 07.03.2009 11:53 McDog |  | v Smartfóny a tablety | 1 | 404 | 14.03.2012 22:35 Qpkqkma |  | v PHP, ASP | 0 | 499 | 17.04.2010 13:18 newboy1 |  | v HTML, XHTML, XML, CSS | 3 | 567 | 29.08.2017 21:18 17mark |  | v Operačné systémy Microsoft | 6 | 1547 | 31.08.2012 11:18 zentin |  | v PHP, ASP | 2 | 501 | 13.04.2009 18:39 Unlink |  | v Assembler, C, C++, Pascal, Java | 5 | 1292 | 13.04.2008 21:19 m@-nX |  | v Bezpečnosť a firewally | 0 | 442 | 26.07.2012 19:55 FBerente |  | v Assembler, C, C++, Pascal, Java | 0 | 348 | 21.09.2011 18:21 ViVe®s |  | v Ostatné | 6 | 750 | 17.01.2019 13:48 LukIneskoNR |  | v HTML, XHTML, XML, CSS | 5 | 607 | 22.01.2011 16:58 davider137 |  | v Assembler, C, C++, Pascal, Java | 1 | 922 | 02.04.2014 12:41 XOLOO |  | [ Choď na stránku: 1, 2 ] v Assembler, C, C++, Pascal, Java | 35 | 5596 | 09.03.2009 17:14 tlacitko Enter |  | v JavaScript, VBScript, Ajax | 1 | 599 | 08.03.2016 15:41 killer |
|