Welches Objekt ruft die Methode auf?

Status
Nicht offen für weitere Antworten.

Marcel_Handball

Bekanntes Mitglied
Hallo zusammen,

ich habe eine generelle Frage. Folgendes Szenario:

Code:
class A{

   B objekc1 = new B();
   B object2 = new B();

   object1.ausführen();
}

Code:
class B{
   public void ausführen(){
   
      // hier möchte ich wissen, welches Objekt die Methode aufgerufen hat

   }
}

Wie kriege ich nun in der Methode heraus, welches Objekt die Funktion aufgerufen hat?
Bitte um Rat

Gruß Marcel
 

Marcel_Handball

Bekanntes Mitglied
Ich habe insgesamt 3 Klassen.

Person, Konto und Katze

Code:
public class Person
{
    private String name;
    private String telefon;
    private Konto konto;
    
    public Person(String name, String telefon)
    {
       this.name = name;
       this.telefon = telefon;
       konto = new Konto(Integer.parseInt(telefon),name);
    }

    public String getName()
    {
        return name;
    }
    
    public String getTelefon()
    {
        return telefon;
    }

    public Konto getKonto()
    {
        return konto;
    }
    
    public void katzeKaufen(){
        
    }
}

Code:
public class Konto{

    private int nummer;
    private String inhaber;
    private double kontoStand;

    public Konto(int nummer, String inhaber){
        this.nummer = nummer;
        this.inhaber = inhaber;
        kontoStand = 0;
    }    

    public double gibtKontoStand(){
        return kontoStand;
    }

    public void einzahlen(double einzahlung){
        kontoStand += einzahlung;
    }
    
    public void abheben(double auszahlung){
        kontoStand -= auszahlung;  
    }   
    
    public void ueberweisen(Konto empfaenger, double betrag){
        abheben(betrag);
        empfaenger.einzahlen(betrag);
    }
    
    public String gibInhaber(){
        return inhaber;
    }
    
    public int gibKontoNummer(){
        return nummer;
    }
      
}

Erstelle ich ein Objekt von Person, hat dieses Objekt sein eigenes Konto.

Code:
Person ich = new Person("name", "telefonnummer");

Nun möchte die Person eine Katze kaufen und ruft die Methode "kaufen" aus der Klasse Katze auf. Diese Methode muss nun aber wissen, von welchem Konto sie eine Geldsumme abrechnen soll.
Wüsste ich nun in dieser Methode das Personen-Objekt, welches die Methode aufgerufen hat, könnte ich schreiben:

Code:
Objektname.konto.abheben();
 
S

SlaterB

Gast
übergib die Person oder ihr Konto als Parameter an die Operation kaufen
 

Rock Lobster

Bekanntes Mitglied
Das hat mich aber hin und wieder auch gestört... Java ist so krass "Reflection-mäßig" nutzbar, da wäre es manchmal echt wünschenswert, in jeder Methode auf den Caller und auch auf dessen Methode zuzugreifen. Habe im Moment ein Projekt, wo ich relativ oft als Parameter den Caller übergebe, aber auf Dauert nervt das, und ich bin mir sicher, daß es vielen anderen genauso geht.

Ich glaube auch, daß sprachlich schon relativ viel gegeben ist, sodaß durch diese Zusatzfunktionalität kaum mehr Overhead entstehen könnte. Ich mein, die Stack-Traces kommen ja auch nicht von ungefähr, und auf deren Basis dürfte es doch eigentlich technisch gar kein Problem sein, z.B. ein "caller"-Keyword einzuführen (so wie "this" und "super"), von dem man die class und die Methode getten kann.

Sollte man vielleicht mal bei Sun in die "Vorschlagbox" werfen ;)
 
S

SlaterB

Gast
bei sowas ist aber ganz dicke die Gefahr der Verwahrlosung des Codes da,

this und super sind elementare Bestandteile der Objektorientierung,
in tausenden Büchern aufgeführt, in tausenden Sprachen enthalten,

einen caller zu gebrauchen steht ganz klar für schlechtes Design,
das brauchst du Java nicht vorschlagen ;)

für eine Reflection- oder StackTrace-Lösung wäre ich aber auch,
als Strohhalm allein schon fürs Logging/ Debugging
 

Rock Lobster

Bekanntes Mitglied
Jo gerade das ist ja wichtig, wenn z.B. in einer Methode ein Fehler vermutet wird, dann wäre es manchmal sehr praktisch, sich über einen SysOut einfach den Caller auszugeben.

Aber Du hast Recht, natürlich entspricht das nicht den gängigen Prinzipien. Als Keyword sollte das dann also nicht nötig sein ;)

Ob allerdings Reflection da so viel besser ist? Hier kann ich über jede beliebige Klasse alles erfahren, und auch das ist denke ich mal nicht mit "streng hierarchischen" und "ich darf nix über dich wissen"-Regeln zu vereinbaren :)

Von daher wäre es wohl echt nicht schlecht, wenn es zwar kein Keyword wäre, aber es zumindest über ein paar Umwege dennoch möglich wäre... (obwohl ich's dann nicht nur zum Debuggen nutzen würde :D )
 
G

Guest

Gast
SlaterB hat gesagt.:
bei sowas ist aber ganz dicke die Gefahr der Verwahrlosung des Codes da,

this und super sind elementare Bestandteile der Objektorientierung,
in tausenden Büchern aufgeführt, in tausenden Sprachen enthalten,

einen caller zu gebrauchen steht ganz klar für schlechtes Design,
Wieso? Über Reflection komm ich doch eh an alles ran, da wäre die caller-Lösung doch sauberer, oder?
(Bitte nicht anmaulen, erkklären, ich wills ja verstehen)
 

Rock Lobster

Bekanntes Mitglied
Naja, es werden bei OOP ja i.d.R. strenge Hierarchien gepredigt. Ein Auto sollte wissen, was es für 'nen Motor drin hat, aber der Motor sollte nicht wissen, in welchem Auto er steckt, bzw. daß er überhaupt in einem Auto steckt. Wenn nun das Auto den Motor startet, soll er das einfach machen "und sein Maul halten". Er hat quasi nix zu sagen :)

Wenn nun aber der Motor rauskriegt, wer ihn aufruft, dann ist er viel zu mächtig. Er könnte sagen "Was?! Ich bin in einem Ford Ka? Oh nein! Ich verweigere jetzt meinen Dienst" ;)

Natürlich gibt es Fälle, wo es praktisch wäre, über den Caller bescheid zu wissen, aber SlaterB hat Recht - wenn das zum Standard-Feature wird, dann benutzt das jeder immer und überall, einfach aus Bequemlichkeitsgründen, und denkt nicht mehr über eine saubere Strukturierung des Codes nach. Zumindest wird das bei einigen Leuten so sein. Sprich, das Feature wird öfter genutzt, als es eigentlich nötig wäre, und es ersetzt für manche wohl die Planung einer sauberen Architektur. Hat im Grunde was von "globalen Variablen". Die sind bequem und einfach und für Anfänger meist "straight forward", aber wenn man ersteinmal Ahnung von guter Architektur hat, dann kann man super ohne globale Variablen auskommen und sieht auch sämtliche Vorteile (bzw eben die Nachteile der globalen Variablen).

So gesehen ist es also richtig, daß das kein Standard-Feature sein sollte. Reflection ist in den meisten Fällen ebenfalls nicht nötig, und es ist etwas, was noch einigermaßen umständlich zu bedienen ist. Gäbe es jetzt direkte, bequeme Reflection-Keywords, dann würde dies auch viel öfter falsch eingesetzt werden. So bleibt es aber nur den Fällen vorbehalten, wo es wirklich nötig ist, und meist können die Programmierer dann auch damit umgehen.
 

Rock Lobster

Bekanntes Mitglied
Über Reflection komm ich doch eh an alles ran, da wäre die caller-Lösung doch sauberer, oder?

Das ist auch nicht ganz korrekt - im Moment kann man die Reflection-API nicht so einsetzen, wie wir es gerade besprechen. Man kann alles über eine Klasse erfahren, aber man kann nicht zur Laufzeit innerhalb einer Methode herauskriegen, wer einen da gerade aufgerufen hat (zumindest wäre mir hierfür keine Möglichkeit bekannt).
 
S

SlaterB

Gast
Anonymous hat gesagt.:
Wieso? Über Reflection komm ich doch eh an alles ran, da wäre die caller-Lösung doch sauberer, oder?
(Bitte nicht anmaulen, erkklären, ich wills ja verstehen)
wie gesagt: über Reflaction, damit wäre ich einverstanden, aber kein direktes caller-Objekt

wobei Reflection für sowas auch gar nicht da ist, es is eher der StackTrace gemeint,
mit Reflection meine ich nur 'auf irgendeine Umweg-API'
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
U Welches ist das richtige Entwurfsmuster Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
P "Komplexe" Datenbankabfragen, welches ist der bessere Weg Allgemeine Java-Themen 4
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
E Welches Dateiformat für gespeicherte Einstellungen? Allgemeine Java-Themen 20
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
ARadauer Welches Programm hört auf Port? Allgemeine Java-Themen 3
P Textfiles laden - egal welches Encoding Allgemeine Java-Themen 9
N Welches design pattern? Allgemeine Java-Themen 8
André Uhres Welches Werzkeug benutzt ihr um eure Mails zu lesen? Allgemeine Java-Themen 47
A Welches Programmdesign? Allgemeine Java-Themen 6
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
F welches array ist im jedem programm? Allgemeine Java-Themen 6
Z Testen welches BS benutzt wird Allgemeine Java-Themen 3
T Welches Webframew0rk für pure Java? Allgemeine Java-Themen 13
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
K Welches Betriebssystem ist in Benutzung? Allgemeine Java-Themen 11
S Welches Verschlüsselungsverfahren Allgemeine Java-Themen 9
G Welches Java GUI Buch würdet Ihr empfehlen Allgemeine Java-Themen 2
W VersionsVerwaltung welches Tool Verwendet ihr Allgemeine Java-Themen 12
D Welches Linux in Verb. mit Java Allgemeine Java-Themen 9
S Welches LookAndFeel ist das? Allgemeine Java-Themen 2
Chucky Java Buch - nur welches? online oder kaufbuch? Allgemeine Java-Themen 18
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3
W welches layout? Allgemeine Java-Themen 3
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26

Ähnliche Java Themen

Neue Themen


Oben