Číslo: -
10. interface Foo { int bar(); }
11. public class Sprite {
12. public int fubar( Foo foo) { return foo.bar(); }
13. public void testFoo() {
14. fubar(
15. new Foo() { public int bar(){ return 1; } }
16. );
17. }
18. }
-Am nie je schopný pochopiť z riadku číslo 14 až 16. pretože som nikdy nevidel taká vec fubar vnútri jeden method.Will nejaký orgán, prosím, vysvetliť 14-16 žiadna linka?
odpovede:
3 pre odpoveď č. 1Toto sa nazýva anonymná vnútorná trieda, Nová trieda s názvom generovaným z kompilátorov sa vytvára v mieste, ktoré robíte new Foo() { ... }
, Táto nová trieda implementuje Foo
rozhranie. Je zhruba ekvivalentom:
interface Foo { int bar(); }
public class Sprite {
public int fubar( Foo foo) { return foo.bar(); }
public class MyFoo implements Foo {
public int bar() { return 1; }
}
public void testFoo() {
fubar(
new MyFoo()
);
}
}
(Predpokladám, že medzi tým chýba priestor new
a Foo
vo vašom príklade je chyba.)
3 pre odpoveď č. 2
Riadok je nesprávny. Mal by mať priestor medzi "novým" a "Foo":
new Foo() { public int bar(){ return 1; } }
Tým sa vytvorí inštancia anonymného typu, ktorý implementuje Foo
, vidieť Java v skratke: anonymné triedy (časť 3.12.3 sa vzťahuje na syntax).
Anonymné triedy sa často používajú s poslucháčmi udalostí. vidieť Swing Trail: Vnútorné triedy a anonymné vnútorné triedy (ale ignorujte Vnútorné triedy popísané v hornej časti tejto sekcie ;-)
Happy kódovanie.
Pre komentár:
Riadok 14 je začiatok volania metódy fubar
(ktorý je definovaný vyššie ako public int fubar(Foo foo)
). Poznač si to new ...
je výraz (anonymný typ alebo nie) a výsledok tohto výrazu (nový objekt) sa odovzdá ako argument fubar
, Formátovanie je väčšinou ľubovoľné - mohlo to byť všetko na jednej línii. Zvážte tento kód:
Foo aNewFoo = new Foo() { ... };
fuubar(aNewFoo);
Dúfam, že to vyrieši.
2 pre odpoveď č. 3
Nazýva sa to anonymná vnútorná trieda. Vytvárate implementáciu Foo
počas letu namiesto toho, aby ste museli napísať pomenovanú triedu.
Tu je potenciálne užitočná otázka SO o tom, čo sú a kedy ich budete chcieť používať.