Avatar billede Lasse Novice
19. januar 2001 - 12:41 Der er 12 kommentarer og
3 løsninger

this reference???

Hvad refererer this til i følgende kode:

public class MyList extends Applet implements ActionListener, ItemListener {
  private List colorList;
  public void init() {
    colorList = new List(5, false);
    colorList.addActionListener( this );
    colorList.add ItemListener( this );

    colorList.add(\"Black\");
    colorList.add(\"Yellow\");
  }
}

Hvad refererer this til i al almindelighed?
Avatar billede disky Nybegynder
19. januar 2001 - 12:43 #1
den referer til \'this\' sig selv.

så du tilføjer en \'ActionListener\' til dig selv (altså et object af klassen)
Avatar billede Lasse Novice
19. januar 2001 - 12:47 #2
det hjalp ikke....
Avatar billede disky Nybegynder
19. januar 2001 - 12:54 #3
det kan godt være det ikke hjalp men det er sandheden !!!

Når du i en klasse bruge THIS referencen, henviser den ALTID til sig selv, det er derfor den hedder THIS. !!!!

Avatar billede Lasse Novice
19. januar 2001 - 13:03 #4
ja, men du må lige forklare lidt nærmere.. jeg er grøn i faget... det jeg har er eksempelvis:

colorList.addActionListener

colorList er et objekt af klassen List... AddActionListener er en metode i klassen List...

eller er AddActionListener en klasse for sig selv
(hvor der her kreeres et objekt vha konstruktoren?)

Når du skriver altid til sig selv, hvordan kan jeg så vide hvad der er \"sig selv\"
Avatar billede disky Nybegynder
19. januar 2001 - 13:16 #5
Puha det med actionlistener taget pænt lang tid at forklare, så det springer jeg lige over.

Men at en \'this\' reference peger på sig selv er ikke så mystisk. Objektet ved godt hvem den selv er :-)

Det minder lidt om hvis du peger på dig selv, så er din finger der peger \'this\' referencen.

En ActionListener er en funktion som man kan sige lytter på om der sker ændringer.
F.eks. \'vågner\' den hvis man vælger et menupunkt. Det er lidt svært at forklare, og det er lang tid siden jeg har arbejdet med den grafiske del af java :(

Jeg roder mest med web baserede ting i øjeblikket.

Så lige den del er der uden tvivl andre der bedre kan forklare.
Avatar billede codemon Nybegynder
19. januar 2001 - 14:41 #6
\'this\' er som disky siger.

udenfor overfører du en reference til et objekt med det navn du nu har fundet på. Inde i selve objektet hedder referencen this

Den kan også bruges til at undgå at skulle finde på forskellige navne i konstruktører eller metoder.

public class MinClass
{
  int egenskab;
  public MinClass (int egenskab)
  {
    this.egenskab = egenskab;
  }
  .
  .
  .

}
Avatar billede stigc Nybegynder
19. januar 2001 - 14:46 #7
I alle componetner, hvor der kan ske en \"action\" kan man tildele den en actionlistener. Det gør man med funktionen:

addActionlistenet(Actionlistener)

Den kunne være en Button, List, PopMenu eller mange andre..

Da du gerne vil fange dine disse actions (når der bliver trykket mm.), sørger du rigtig nok for at \"implements Actionlistener\". Dermed arver din applet fra Actionlistener, og er derfor nød til at indeholde funktionen actionPerformed\"... Det er nemlig her mange fanger disse events/actions.

Altså når du implements Actionlistener, så er din applet-klasse også en ActionListener

This refererer altid til den klasse du er i! Det passer også fint her. Du kalder funktionen på din liste

colorList.addActionListener( this );

og funktionen skal have en actionListener som argument, og det er din appelt-klasse jo, så derfor skriver du this!


Avatar billede disky Nybegynder
19. januar 2001 - 14:48 #8
Stigc:

Den arver ikke, du kan kun arve hvis du bruger \'extends\' den implementerer et interface, som rigtigt nok kræver at du har en \'actionPerformed\' metoden.

Jeg synes lige det skulle pointeres, da Gooky er \'grøn\' :-)
Avatar billede stigc Nybegynder
19. januar 2001 - 15:31 #9
Jo der er faktisk arv. Det er arv fra en abstract klasse, og i JAVA kaldes det \"to implements an interface\"... Men der jo stadigvæk arv!
Avatar billede codemon Nybegynder
19. januar 2001 - 21:26 #10
Jeg giver disky ret. Ved at arve fra en abstrakt klasse bruges \"extends\" og i en abstrakt klasse kan der godt være ikke-abstrakte metoder. Fuldt færdigkodet.

I et interface er alle metoder altid abstrakte så man får aldrig nogle metoder med, ved at implementere et interface. Man får en \"kontrakt\" som skal overholdes. Ok konstanter kan medfølge så i den forbindelse kan der være tale om at der arves.

Der er også interfaces i java som ikke kræver nogen metoder, men kun virker som et flag for compileren, fx Serializable.
Avatar billede Lasse Novice
20. januar 2001 - 13:27 #11
nå, men nu tror jeg er jeg er ved at være med... For de fine svar propper jeg lige ekstra 30 point i puljen også kan i dele de 60...

Som jeg har forstået det nu, så:

ved at oprette et objekt af typen \"bla\"(som er en klasse), refererer this til dette oprettet objekt... er det rigtigt? Oprettes der et nyt objekt, refererer this til dette objekt osv.
Avatar billede bobbync Nybegynder
24. januar 2001 - 20:11 #12
this Referencen, En instance metode kan anvende this til explicit at identificere objektet selv, Skal f.eks. anvendes hvis en metodes argument skjuler en instanse variabel
Kan også anvendes til at overføre en reference til det aktuelle objekt.
ps. jeg er ligeglad med point men sådan er det nu engang med this referencen!
Avatar billede bobbync Nybegynder
24. januar 2001 - 20:18 #13
du kan gå ind på min tidligere lærers hjemmeside
http://www.rhs.dk/poulh/prog2/noter/noter.htm
og kigge under klasser og objekter kig så på this referencen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(også det andet naturligvis)
Avatar billede bobbync Nybegynder
24. januar 2001 - 20:25 #14
hvis du er grøn synes jeg at du skal bruge en weekend på at kigge på alle disse overheads, de er en stor hjælp til at forstå java lidt bedre!
Avatar billede Lasse Novice
25. januar 2001 - 10:40 #15
ok, tak for svaret..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester