tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
388
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von tinella
    tinella tinella ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Ort
    Schweiz
    Beiträge
    201
    hallo leute

    bitte helft mir bin jetzt dann am durchdrehen.

    ich hab ein interface und etwa 6 versch klassen die davon methoden implementieren.
    nun muss ich ein property namens prop da übergeben (für die methode store) da ich dieses teil brauche für EINE von diesen klassen. die anderen fünf klassen brauchen das store vom interface aber ohne property. das heisst ich kann prop nicht einfach im interface der methode übergeben.

    jetzt hat mir jemand gesagt dass ich das mit einem object machen soll nur wie und wo? sodass das object nur dann aufgerufen wird wenn man es braucht..


    bitte helft mir..
    :-/


    tinella
     

  2. #2
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Du kannst die Methode store im interface so definieren, dass sie ein Parameter vom Typ Object erwartet. Bei Aufruf der Methode an den fünf Klassen übergiebst Du null.
    An der einen Klasse übergibst Du Deine Property.
    In der Methode store in der einen einzigen Klasse überprüfst Du, ob das Object von dem Typ ist, den Du erwartest und machst dann einen typecast.
    Ich mache dann immer noch folgendes:
    Wenn es der falsche Typ ist suchst Du Dir in der JavaAPI 'ne hübsche Exception, z.B. IllegalArgumentException und schmeißt diese.
    Aufrufende Klassen sollten darauf rücksicht nehmen und diese evtl. abfangen und sinnvoll verarbeiten.

    Gruß hpvw
     

  3. #3
    torsch2711 torsch2711 ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Ort
    Hessen
    Beiträge
    310
    Ansonsten, definierst du halt 2 Methoden store eine mit argument und eine ohne.


    public void store();

    public void store(Object obj);

    und lässt diese funktion einfach leer bei den anderen Klassen.
    Ist zwar kein schöner stil, aber auch wirksam.

    Oder hab ich das problem nicht ganz verstanden?

    Grüsse

    Torsten.
    Geändert von torsch2711 (12.11.04 um 17:32 Uhr)
     
    "There's nothing we have to fear, except Fear itself....."

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Falls die "anderen" Klassen von keine Klasse (außer Object erben) könntest du auch eine abstrakte Klasse erstellen, welche die Methode store() als abstract deklariert und die Methode store(blabla ddd) mit einer default Implementierung ausstattest. Diese kannst du dann bei deiner "einen" Klasse wie gewünscht überschreiben.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    zu Thomas Darimont:
    Die Defaultimplementierung sollte dann die abstrake Methode store() aufrufen.
    So kann es nicht passieren, dass man an einer Subklasse eine Methode aufrufen kann, die nichts "sinnvolles" tut.
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Die Default-Implementierung könnte aber auch eine UnsupportedOperationException werfen.
    IMHO ist das sogar die bessere Wahl denn wenn man store(blabla ...) aufruft will man ja genau DIE Aktion durchführen für die store(blabla...) gedacht ist und nicht store() (kommt auf die Implementierung an)

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  7. #7
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Da wir natürlich nicht genau wissen, wofür die Methoden gedacht sind, kann darüber sicher lange diskutieren.
    Das eine in der abstrakten Klasse definierte Methode per default eine UnsupportedOperationException wirft würde mich als Implentierer einer Subklasse ganz schön wundern.
    Das kommt sicher ein bisschen auf den eigenen Programmierstil an.
    Wenn ich 2 Methoden den gleichen Namen gebe und sie nur durch ihre Parameter zu unterschieden sind, dann sollen sie im Prinzip dasselbe tun, nur halt einmal mit Parameter und einmal ohne. Dann halte ich es für sinnvoll, dass die Mächtigere im Zweifel die weniger Mächtige aufruft. Mit Konstruktoren macht man das ja auch oft so.
    Aber es gibt sicher viele Möglichkeiten und man kann wohl selten eine als falsch oder ultimative Lösung einstufen.

    Gruß hpvw
     

  8. #8
    Avatar von tinella
    tinella tinella ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Ort
    Schweiz
    Beiträge
    201
    hallo..

    vielen dank ihr habt mir hiermit ziemlich geholfen..

    nen schönen tag noch!


    tinella
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 24.10.10, 10:37
  2. Java Reflection Object ein Interface implemetieren
    Von raphael_fehlmann im Forum Java
    Antworten: 10
    Letzter Beitrag: 05.09.10, 14:43
  3. Antworten: 1
    Letzter Beitrag: 12.11.08, 11:42
  4. Antworten: 5
    Letzter Beitrag: 28.08.07, 20:03
  5. Antworten: 6
    Letzter Beitrag: 10.03.06, 03:03