» »

[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:

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:


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

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 ::

shadeX je izjavil:

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 :)

shadeX je izjavil:


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 ()

shadeX ::

Mavrik. Ti si zakon! Hvala.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Bluetooth aplikacija

Oddelek: Programiranje
5828 (691) marjan_h
»

Android - Začetnik

Oddelek: Programiranje
111517 (842) hurlimannxt
»

android črta

Oddelek: Programiranje
412073 (1344) g333kk
»

[android] crash

Oddelek: Programiranje
61131 (940) messi
»

[Android]Vrnitev v "parent" activity

Oddelek: Programiranje
101216 (1089) KernelPanic

Več podobnih tem