Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Cast Problem bei Vererbung mit Java

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.05.2004
    Beiträge
    5

    Cast Problem bei Vererbung mit Java

    Hallo,

    ich habe ein kleines Problem mit der Vererbung

    Ich habe eine Superklasse Channel. und RGBVertex der von Channel abgeleitet ist. Nun möchte ich aber ein Channel Objekt zu einem RGBVertex Object casten:

    class RRGVertex extends Channel {

    ...

    public void addEdge(Channel edge) {
    RRGVertex _edge;
    _edge = (RRGVertex) edge;
    ...
    }

    Jedoch macht er statt eines Casts einen Fehler, wie kann ich das Channel Objekt zu einem RRGVertex Object casten.

    Danke Reset

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    was ist denn die Fehlermeldung?

    Du bist dir doch schon bewusst, dass das was der Funktion als "Channel edge" übergeben wird in Wirklichkeit ein RRGVertex sein muss damit das Casten geht, oder?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Was für eine Exception tirtt denn auf "ClassCastException", oder was anderes?

    fs111

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.07.2000
    Ort
    Österreich
    Beiträge
    189
    die frage ist, was kommt genau, eine fehlermeldung (es wird nicht fertig kompiliert) oder eine warnung?
    kommt das problem überhaupt schon beim kopilieren, oder erst bei der ausführung?

    das problem ist jedenfalls dass es sich um einen unsicheren cast handelt.
    d.h. du willst nach unten casten, wobei es aber nicht sicher ist das es sich tatsächlich um ein objekt dieser klasse handelt.

    du solltest auf jedenfall mal konrollieren ob es sich bei edge wirklich um ein RRGVertex-objekt handelt, also z.b:

    Code:
    public void addEdge(Channel edge) {
    
      RRGVertex _edge;
      
      if (edge instanceof RRGVertex)
        _edge = (RRGVertex) edge;
      else
        /* fehlerbehandlung */
    ...
    }

  5. #5
    Registrierter Benutzer
    Registriert seit
    13.05.2004
    Beiträge
    5
    Vielen dank fur eure Hilfe, leider habe ich herausbekommen, das es gar nicht so geht, wie ich es mir vorgestellt habe.
    Jetzt mache ich es nicht mehr so, daß ich das Object caste sondern, daß ich einfach mit dem Super Objekt Initialisiere, das macht im Grunde keinen Unterschied.

    Vielen Dank
    Reset

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Man kann nicht die Vererbungslinie heruntercasten, da die abgeleitete Klasse Features besitzt, die die Mutterklasse nicht besitzt.

    TME

  7. #7
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Sie muss nicht, aber sie kann. Deshalb kann man das generell nicht wenn es nicht auch ein Objekt der Cast-Ziel-Klasse (oder einer noch tiefer unten im Vererbungsbaum liegenden Klasse) ist

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •