Avatar billede Slettet bruger
20. september 2004 - 15:39 Der er 20 kommentarer og
1 løsning

Get reference to caller

Hej,

Hvis A kalder en metode i B, er det da
muligt at få en reference til A? - Uden at overføre
denne som parameter.
Avatar billede Slettet bruger
20. september 2004 - 15:40 #1
Altså fra metoden i B, at få en reference til det objekt, der har kaldt metoden.
Avatar billede arne_v Ekspert
20. september 2004 - 15:49 #2
Nej.

Kald med this.
Avatar billede Slettet bruger
20. september 2004 - 15:50 #3
Svar.
Avatar billede Slettet bruger
20. september 2004 - 15:51 #4
Hvorfor kan man egentlig ikke det? Er det fordi at informationen slet ikke er tilgægelig?
Avatar billede arne_v Ekspert
20. september 2004 - 15:54 #5
Det er meget svært at implementere.

Du kan godt se i kalde stakken hvor du kommer fra. Men hvis der er instantieret
flere objekter af den klasse, så kan du ikke finde det som har kaldt.
Avatar billede arne_v Ekspert
20. september 2004 - 15:54 #6
svar
Avatar billede Slettet bruger
20. september 2004 - 15:54 #7
Jeg er nysgerring, mercur8, hvordan kan man overhovedet kalde en klasse hvor man er usikker på hvilken klasse man kalder fra?
Avatar billede arne_v Ekspert
20. september 2004 - 15:57 #8
Ideen er vel at spare et argument.
Avatar billede Slettet bruger
20. september 2004 - 16:07 #9
jo, jeg er med på ideen, men jeg mangler lige et praktisk eksempel på hvornår man vil få brug for denne information - jeg tænkte selv i retningen af en multi-trådet applikation, men der vil man jo kunne få navnet på tråden vha. Thread.currentThread().getName()...

Jeg er bare nysgerrig :-)
Avatar billede arne_v Ekspert
20. september 2004 - 16:10 #10
Jeg kan ikke forestille mig nogen situation hvor det er absolut nødvendigt, da men
vel altid kan sende this med over som et argument.

Medmindre måske at man ikke har kilde koden til kalder. Og derfor gerne vil
kune fiske en reference til det kaldende objekt.
Avatar billede Slettet bruger
20. september 2004 - 16:52 #11
Så informationen er faktisk på stakken? Eller kan man blot se klassen (A) eller hvad?

Ja idéen var bare at spare et argument.
Avatar billede arne_v Ekspert
20. september 2004 - 17:01 #12
Det er kun klassen & metoden der er på stakken. Ikke instansen.
Avatar billede Slettet bruger
20. september 2004 - 17:02 #13
Altså den kaldende klasse og metode?
Avatar billede arne_v Ekspert
20. september 2004 - 17:05 #14
Ja.

Af indlysende årsager gemmer de kun selve den eksekverbare kopi i et eksemplar
selvom der er 1000 instanser.
Avatar billede arne_v Ekspert
20. september 2004 - 17:08 #15
Hvis du har lyst til at lege med stak så prøv:

public class Tracer {
  public static void whereAmI() {
      Exception ex = new Exception();
      StackTraceElement[] ste = ex.getStackTrace();
      for(int i = 0; i < ste.length; i++) {
        System.out.println(ste[i].getMethodName());
      }
  }
  public static void subbo() {
      whereAmI();
  }
  public static void main(String[] args) {
      subbo();
  }
}
Avatar billede Slettet bruger
20. september 2004 - 17:16 #16
Tak.
Avatar billede Slettet bruger
20. september 2004 - 17:31 #17
"Af indlysende årsager gemmer de kun selve den eksekverbare kopi i et eksemplar.." -
har du tilfældigvis noget link til info, der beskriver dette?
Avatar billede arne_v Ekspert
20. september 2004 - 17:33 #18
Nej.

Jeg har aldrig læst det nogen steder.

Men hvis du skulle designe JVM ville du så ligge koden for alle metoderne på
String i en kopi per instans af String ?
Avatar billede Slettet bruger
20. september 2004 - 17:41 #19
Det er ikke fordi, jeg ikke tror på dig. Og jeg skulle nok ikke designe JVM tror jeg :) Tænkte bare at den artikel kunne indeholde andet relateret interessant information.
Avatar billede simonvalter Praktikant
20. september 2004 - 17:59 #20
Du kan sikkert finde det her men det er lidt tung læsning ;)
http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html
Avatar billede arne_v Ekspert
20. september 2004 - 19:22 #21
Jeg er ikke angang sikker på at den er der.

Den beskriver hvordan en JVM skal opføre sig.

Det her er en implementations ting. Men en implementations ting, hvor
jeg ikke er i tvivl om hvordan det er.
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