Zeige Ergebnis 1 bis 16 von 16
  1. #1
    derblob_inaktiv
    Gast

    JAVA: Rückgabetyp einer geerbten Methode ändern?

    Ich möchte den Rückgabetyp einer geerbten Methode ändern. Wie kriege ich das hin?
    Wenn ich ein Interface implementiere, dass die Methode mit geändertem Rückgabetyp enthält, kriege ich abwechselnd die Fehler, dass die Superklasse bzw. das Interface einen anderen Typ verlangt


  2. #2
    Benutzerbild von max3ll
    Registriert seit
    Dez 2001
    Beiträge
    31
    Likes
    0
    wie ist er denn bisher und was willst du daraus machen? Generell könntest du ja eine methode schreiben die eben deinen geänderten Rückgabewert besitzt und dann die basismethode mit super aufrufen und das ergebnis entsprechend weiterverwenden für deinen geänderten Rückgabewert

  3. #3
    Benutzerbild von EnimaN
    Registriert seit
    Aug 2002
    Beiträge
    209
    Likes
    0
    imo gibt das inhaltlich keinen sinn, da vererbte methoden grundsätzlich den gleichen typ haben sollten (sonst ist das oop-prinzip verletzt)

    die lösung wäre wohl eine neue funktion (diese kann ja evtl die methode der elternklasse aufrufen)

  4. #4
    Benutzerbild von Menace2Sobriety
    Registriert seit
    Okt 2001
    Ort
    Ja, gerne
    Beiträge
    7.100
    QLive Nick
    ja
    Likes
    0

    Re: JAVA: Rückgabetyp einer geerbten Methode ändern?

    Original geschrieben von derblob
    Ich möchte den Rückgabetyp einer geerbten Methode ändern. Wie kriege ich das hin?
    gar nicht ;>
    I feel sorry for people who don't drink. When they wake up in the morning, that's as good as they're going to feel all day - Frank Sinatra / Josh Ward

  5. #5
    Benutzerbild von oNyx
    Registriert seit
    Mai 2001
    Beiträge
    14.099
    Likes
    4
    anderer rückgabetyp==andere signatur... andere signatur==methode wird nicht überschrieben.

    tja. so is das.

    wär ja auch reichlich ätzend, wenn das gehn würde :>
    弾幕 to the full extent of the jam!

    ze blog [rss] ☆ java game tutorialseee games

  6. #6
    Benutzerbild von pr0kyon
    Registriert seit
    Aug 2003
    Beiträge
    2.014
    Likes
    1
    Immerhin kann man per kovariantem Rückgabetyp Subklassenreferenzen zurückgeben, wenn die Oberklasse ihren eigenen Typ zurückgibt. Aber abgesehen davon, wäre das nicht im Sinne des Erfinders.

  7. #7
    Benutzerbild von nFec
    Registriert seit
    Jun 2002
    Beiträge
    2.783
    QLive Nick
    nFec
    Likes
    0
    Und dann in der rufenden Klasse mit instanceOf und Typecasts arbeiten oder?
    Super Stil.

    Kannst dich ja mal bei The Daily Wtf bewerben

    Es gibt einfach Fragestellungen bzw. Probleme bei denen man sofort sein Design ueberdenken sollte. Deine gehoert dazu.
    "Doch wir horchen allein dem Gerücht und wissen durchaus nichts." - Ilias

  8. #8
    derblob_inaktiv
    Gast
    Original geschrieben von Ðeimøs
    Immerhin kann man per kovariantem Rückgabetyp Subklassenreferenzen zurückgeben, wenn die Oberklasse ihren eigenen Typ zurückgibt. Aber abgesehen davon, wäre das nicht im Sinne des Erfinders.
    Bitte wie meinen?
    Um das Problem deutlicher zu machen: es geht um eine Implementierung des Decoratorpatterns. D.h. es werden Methoden verändert, ohne das sich für den Aufrufer was ändert. Aber ich vermute mal, Rückgabetyp ändern geht nicht.
    Eine zusätzliche Methode ist aber auch doof, weil ich dann ja auf den dekorierten Typ casten müßte, um die zusätzliche Methode zu sehen.
    Vielleicht irgendwie mit einem Interface im abstrakten Decorator?
    Decoratorpattern
    Ist schon etwas komplizierter, aber falls sich jemand gut damit auskennt und mir helfen will wäre ich ihm sehr dankbar.

    Original geschrieben von nFec
    Und dann in der rufenden Klasse mit instanceOf und Typecasts arbeiten oder?
    Super Stil.

    Kannst dich ja mal bei The Daily Wtf bewerben

    Es gibt einfach Fragestellungen bzw. Probleme bei denen man sofort sein Design ueberdenken sollte. Deine gehoert dazu.
    Hast Du verstanden, was ich machen will? Ich denke nicht. Trotzdem danke für Deinen äußerst hilfreichen Beitrag.


    Ich werde jetzt wohl einfach die toString() Methode entsprechend überladen. Weniger schön für den Aufrufer, aber was besseres fällt mir nicht ein.

  9. #9
    Benutzerbild von nFec
    Registriert seit
    Jun 2002
    Beiträge
    2.783
    QLive Nick
    nFec
    Likes
    0
    Original geschrieben von derblob
    Bitte wie meinen?
    Um das Problem deutlicher zu machen: es geht um eine Implementierung des Decoratorpatterns. D.h. es werden Methoden verändert, ohne das sich für den Aufrufer was ändert. Aber ich vermute mal, Rückgabetyp ändern geht nicht.
    Eine zusätzliche Methode ist aber auch doof, weil ich dann ja auf den dekorierten Typ casten müßte, um die zusätzliche Methode zu sehen.
    Vielleicht irgendwie mit einem Interface im abstrakten Decorator?
    Decoratorpattern
    Ist schon etwas komplizierter, aber falls sich jemand gut damit auskennt und mir helfen will wäre ich ihm sehr dankbar.



    Hast Du verstanden, was ich machen will? Ich denke nicht. Trotzdem danke für Deinen äußerst hilfreichen Beitrag.



    Ich werde jetzt wohl einfach die toString() Methode entsprechend überladen. Weniger schön für den Aufrufer, aber was besseres fällt mir nicht ein.
    So wie du es im ersten Beitrag geschrieben hast konnte man davon ausgehen, dass du soetwas machen willst:

    Code:
    class Node {
        public int getValue();
    }
    
    class Leaf extends Node {
        public double getValue();
    }
    
    rufendes Programmfragment:
    if( element instanceOf Leaf ) {
        double value = element.getValue();
    } else if( element instaceOf Node && !element instanceOf Leaf ) {
        int value = element.getValue();
    }
    So hab ich das zumindest verstanden, und ich finde da waere anzweifeln des Designkonzepts sehr sinnvoll.

    ---
    Mir ist klar, dass die Variablendeklaration so keinen Sinn macht aber ich wollte nur Beispielhaft aufzeigen was ich meinte.


    Wenn du beschreiben kannst was du modellieren willst, dann koennen wir dir bestimmt helfen und das Dekorater Pattern abaendern oder ein anderes Konzept vorschlagen.
    "Doch wir horchen allein dem Gerücht und wissen durchaus nichts." - Ilias

  10. #10
    Benutzerbild von pr0kyon
    Registriert seit
    Aug 2003
    Beiträge
    2.014
    Likes
    1
    Das wird so nichts; du solltest wirklich mal klar formulieren, was du eigentlich konkret implementieren willst.

    Rückgabetyp verändern geht schon alleine deswegen nicht, weil der Aufrufer ja einen bestimmten Typ erwartet. Für ihn soll aber die hinzugefügte Funktionalität eigentlich unsichtbar sein.

  11. #11
    Benutzerbild von HomicideSapiens
    Registriert seit
    Feb 2002
    Beiträge
    1.575
    Likes
    0
    Original geschrieben von derblob

    Um das Problem deutlicher zu machen: es geht um eine Implementierung des Decoratorpatterns. D.h. es werden Methoden verändert, ohne das sich für den Aufrufer was ändert. Aber ich vermute mal, Rückgabetyp ändern geht nicht.
    [...]
    Ich werde jetzt wohl einfach die toString() Methode entsprechend überladen. Weniger schön für den Aufrufer, aber was besseres fällt mir nicht ein.
    Der von dir verlinkte Wikipedia Artikel zeigt doch deutlich das das Decorator Pattern nicht genutzt wird um das Inferface zu ändern, sondern um innerhalb der 'Grenzen' des Interfaces die Methoden des dekorierten Objektes zu erweitern.
    Wie oNyx bereits erwähnt hat ist dein Vorhaben technisch unmöglich.

    Ich frage mich auch wieso du solch einen Stunt hinlegen willst, wenn du scheinbar doch Kontrolle über die Interfaces hast. Definiere ein erweitertes Interface mit der neuen Signatur und benutze das im aufrufenden code.

    Die toString() Methode würde ich auch nur fürs logging/debugging überschreiben, alles andere wäre nicht grad gutes design (java.lang.String und die entsprechenden Hilfsklassen mal ausgenommen)

    Ein konkretes Beispiel für dein Problem würde hier echt weiterhelfen. Falls es zu viel code zum posten ist: http://pastebin.ca/
    There are only 10 types of people in in the world: Those who understand binary and those who don't.

  12. #12
    Benutzerbild von pr0kyon
    Registriert seit
    Aug 2003
    Beiträge
    2.014
    Likes
    1
    Was ist nun eigentlich daraus geworden?

  13. #13
    Benutzerbild von nFec
    Registriert seit
    Jun 2002
    Beiträge
    2.783
    QLive Nick
    nFec
    Likes
    0
    Wuerde mich auch interessieren?
    Fordere uns!

  14. #14
    Overflouh
    Gast
    Ich habe bzw. werde das Problem so lösen, dass ich eine eigene Spezialiesierung bilde (z.B. von Calendar), und die toString() Methode entsprechend überlade.
    Eine zusätzliche Methode im Decorator anbieten ist zwar auch eine nette Lösung, würde aber beim Aufrufer einen Cast auf das entsprechend dekorierte Objekt voraussetzen, wogegen der neue Calendar implizit genutzt werden kann: ich dekoriere einfach so, dass mein neuer Calendar mit der neuen toString() Methode zurück kommt.

    Ich bin müde und das mag konfus klingen: bei Intresse erläutere ich das gerne detallierter

    Vielen Dank für Eure Hilfe!

    Edith merkt an, dass ich der Blob bin. Meine Accounts sind nur verwirrt, bzw. ich wußte von diesem hier gar nichts :o

  15. #15
    Benutzerbild von nFec
    Registriert seit
    Jun 2002
    Beiträge
    2.783
    QLive Nick
    nFec
    Likes
    0
    Poste doch mal ein UML Diagramm, oder die Klassenstrukturen. (Also Quasi abstrakt, oder Header.)
    Wuerde mich interessieren was du meinst, und evtl. gehts ja dann auch noch schoener.

  16. #16
    Overflouh
    Gast
    Es gibt eine komplexe Klasse. Diese wird dekoriert, also gewrappt. Um nun effektiv den Rückgabetyp bei Methoden, die z.B. Calendar zurück liefern, zu ändern, habe ich einen eigenen Calendar abgeleitet, und lasse den Decorator diesen zurück geben (anstatt Gregorian).
    Ich verletze damit nicht die Signatur, kann aber trotzdem in toString() reinschreiben, was ich möchte.
    Sinn des Ganzen: es handelt sich um eine Webanwendung, und die möchte ja nach Möglichkeit schön formatierte Strings kriegen, und nicht komische, komplexe Strukturen.

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
  •