Forum » Programiranje » [Java] Interface z keyword new
[Java] Interface z keyword new
shadeX ::
Vem da je nemogoče ustvariti objekt z interface-a, sam to mi ne gre v glavo. Recimo imam kodo:
Zakaj tisti "new" pred imenom interfaca?? Lahko kdo prosim razloži..:)
gumb.setOnClickListener(new View.setOnClickListener() { //metode, ki jih interface implementa.. }
Zakaj tisti "new" pred imenom interfaca?? Lahko kdo prosim razloži..:)
- spremenil: Mavrik ()
Mavrik ::
Zato ker ne ustvarjaš interfaca. To je posebna Java sintaksa - naredil boš instanco anonimnega razreda, ki implementira vmesnik View.OnClickListener (predvidevam da si se zatipkal pri pisanju View.setOnClickListener ;) ).
To je približno ekvivalentno kodi:
To je približno ekvivalentno kodi:
private class MojOnClickListener implements View.OnClickListener { // metode } gumb.setOnClickListener(new MojOnClickListener());
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
shadeX ::
Ok to razumem.
A mi lahko sedaj še kdo razloži zakaj potem recimo ta interface igra vlogo ku nekega objekta. Mislim..recimo citiram
1. Single instance of this class?? kako class če pa na vrhu piše public interface?
2. Če je interface ne more imeti "instance" of this class ? Iz interfac-a se ne da ustvariti objekta
In še eno podvprašanje.
Objekt je ustvarjen z keyword "new". Zakaj pri nekaterih razredih nemoreš uporabit keyword "new" ampak ti piše: "Get instance of this class by typing: getblabla();"
instance of this class , ali object a ni eno in isto?
A mi lahko sedaj še kdo razloži zakaj potem recimo ta interface igra vlogo ku nekega objekta. Mislim..recimo citiram
Interface for accessing and modifying preference data returned by getSharedPreferences(String, int). For any particular set of preferences, there is a single instance of this class that all clients share. Modifications to the preferences must go through an SharedPreferences.Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage.
1. Single instance of this class?? kako class če pa na vrhu piše public interface?
2. Če je interface ne more imeti "instance" of this class ? Iz interfac-a se ne da ustvariti objekta
In še eno podvprašanje.
Objekt je ustvarjen z keyword "new". Zakaj pri nekaterih razredih nemoreš uporabit keyword "new" ampak ti piše: "Get instance of this class by typing: getblabla();"
instance of this class , ali object a ni eno in isto?
Mavrik ::
Ok to razumem.
1. Single instance of this class?? kako class če pa na vrhu piše public interface?
2. Če je interface ne more imeti "instance" of this class ? Iz interfac-a se ne da ustvariti objekta
Ja, dobil boš instanco nekega razreda, ki implementira ta interface. Hočejo ti pa povedati, da boš ob klicu getSharedPreferences vedno dobil ISTI objekt (isto instanco razreda, ki implementira ta interface). Konkretno, če boš uporabil Eclipse debugger, boš videl da dobiš instanco razreda android.app.SharedPreferences.Impl, ki implementira SharedPreferences vmesnik :)
In še eno podvprašanje.
Objekt je ustvarjen z keyword "new". Zakaj pri nekaterih razredih nemoreš uporabit keyword "new" ampak ti piše: "Get instance of this class by typing: getblabla();"
instance of this class , ali object a ni eno in isto?
Pravilno razmišljaš. Manjka ti le nekaj - včasih designer APIja noče dovoliti ustvarjanje novih objektov z new. Zgoraj imaš tipičen primer - ker mora obstajati samo ena instanca razreda SharedPreferencesImpl ti ne smejo dovoliti klica new.
Zato ponavadi imajo taki razredi konstruktorje deklarirane kot private (kar prepreči klic new) in izpostavijo statično funkcijo, ki pokliče new namesto tebe in ti vrne narejeno instanco objekta.
Singleton pattern je recimo primer kjer ti to pride prav.
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android] Bluetooth aplikacijaOddelek: Programiranje | 1089 (952) | marjan_h |
» | Android - ZačetnikOddelek: Programiranje | 1781 (1106) | hurlimannxt |
» | android črtaOddelek: Programiranje | 2398 (1669) | g333kk |
» | [android] crashOddelek: Programiranje | 1338 (1147) | messi |
» | [Android]Vrnitev v "parent" activityOddelek: Programiranje | 1503 (1376) | KernelPanic |