wie kann ich überladene Konstruktoren "umleiten"?

Status
Nicht offen für weitere Antworten.

zero-2-one

Mitglied
Hallo,

bin über die Suchfunktion gerade nicht fündig geworden...

Also ich habe eine Klasse in der zwei Konstruktoren sind. Der erste bekommt einen int übergeben und soll direkt etwas damit machen und der zweite bekommt einen String übergeben, den ich wenn möglich in einen int konvertiere (sonst halt ne exception) und der dann den ersten konstruktor mit genau diesem int aufruft. ich weiß jetzt aber nicht, wie ich auf den ersten Konstruktor umleiten kann und hoffe, dass mir das kurz wer erklärt.

Code:
  public Konstruktor(int x)  // Das ist mein Konstruktor 1
  {
     this.wert = x;
     tueWasMitX();
  }
  
  public Konstruktor(String x) // Das ist mein Konstruktor 2
  {
    try
    {
      int temp = Integer.parseInt(x);
      
     // das hier waren meine drei Ideen, aber in allen Fällen meckert der Compiler

      Konstruktor(temp);             //Variante 1
//      this(temp);                      //Variante 2
//      this.Konstruktor(temp);    //Variante 3

    }
    catch(NumberFormatException e)
    {
      meckereRum();
    }
  }

Also mir ist klar, dass ich in beide Konstruktoren einfach das gleiche reinschreiben könnte oder aber dadurch wird doch irgendwie die Wartbarkeit eingeschränkt, oder?
 
S

SlaterB

Gast
wenn du umleiten möchtest dann muss
this(int);
als erster Befehl im Konstruktor stehen,
z.B. this(Integer.parseInt(x));

du darfst nicht mal try/catch drumschreiben,
wenn die Exception zwingend abzufangen wäre, müsstest du throws Exception an den Konstruktor schreiben


als alternative bleibt noch der Aufruf eine Operation, idealerweise statisch:
this(parse(x));
darin dann alle Möglichkeiten

--------

Alternative: beide Konstruktoren rufen Operation init(int) auf,
der String-Konstruktor kann dann gerne vorher noch String in int wandeln
 

eicon11

Aktives Mitglied
Hi, ich glaube eine Klasse kann keine 2 Konstruktoren enthalten, du kannst ja auch nit sei Methoden mit dem gleichen Namen in einer Klasse einbauen

Warum soll dass schlecht wartbar sein wenn du beides in einen Konstrucktor reinschreibst ?
 

zero-2-one

Mitglied
Danke für die Antworten, werd gleich noch ein bischen rumprobieren ob ich's so hinbekomme :)

@eicon11: man kann mehrere Konstruktoren, wie auch methoden mit dem gleichen namen haben (solange sie sich durch die übergebenen Variablentypen oder die Variablenanzahl eindeutig voneinander unterscheiden lassen)

und stell dir vor ich würde mir jetzt noch überlegen auch das ganze mit Double, Char,... machen zu wollen. Dann müsste ich überall im Konstruktor nochmal hinschreiben was ich eigentlich mit meinem int machen will. Wenn ich jetzt aufeinmal feststelle, dass ich aber irgendwann nochmehr mit dem int machen muss/will/wie auch immer, dann müsste ich in allen 4 oder nochmehr Konstruktoren was ändern - andernfalls nur in einem (auf den ich umleite).
 

zero-2-one

Mitglied
@ SlaterB:
Was du mit der parsemethode meinst ist mir klar - da mein Problem nicht sehr ausführlich ist werde ich das auch so machen

Aber könntest du mir kurz mit ein wenig quelltext zeigen wie ich meinen ersten Konstruktor ergänzen müsste, dass er bei der Übergabe eines falschen Typs eine Exception auslöst. Interessant wäre für mich dabei, wie ich dann auf die Exception reagieren kann (also rein syntaktisch). Also bisher ist geplant, dass beim auslösen einer Exception in eine Instanzvariable "ist keine Zahl" reingeschrieben wird.
Ich hab mich bisher nichnicht wirklich mit Exceptions befasst und wäre deshalb froh ein kleines Syntaxbeispiel zu haben.

Achja, und dann würde mich noch interessiern, warum du parsemethode statisch deklarieren würdest?

edit: ok, dass mit dem statischen hab ich gerade beim Kompilieren gemerkt... ich kann nicht auf die methode zugreifen, wenn der Konstruktor noch nicht abgearbeitet wurde, es sei denn sie ist static, oder? Dann habe ich aber das Problem, das ich im catch-Block (der sich jetzt in der parse befindet) nicht in meine Instanzvariable reinschreiben kann, was ja auch logisch ist. Naja, ich hoffe jetzt einfach doch noch auf ein throws exception Beispiel von dir
 
S

SlaterB

Gast
> ich kann nicht auf die methode zugreifen, wenn der Konstruktor noch nicht abgearbeitet wurde, es sei denn sie ist static, oder?

selbst wenn wäre es keine gute Idee, weil das Objekt in einem inkonsistenten Zustand ist,
zumal dürftest du zum Parsen nichts von dem (eh noch nicht ganz vorhandenen) Objekt brauchen, also sowieso eher statische Hilfsoperation

---------

> bei der Übergabe eines falschen Typs

die Typsicherheit in Java verhindert das, wenn du nicht gerade irgendwo Object-Parameter hast,
du meinst vielleicht die Übergabe eines falschen Strings,
wie gesagt kannst du nur in der parse-Methode ein try-catch schreiben,

wenn du dann erst im Konstruktor drauf reagieren willst wirds schwierig,
du könntest -1 oder sonst einen bestimmten Wert übergeben, um diese Information auszudrücken,
oder einen Integer, welcher zusätzlich noch null sein kann
 
G

Gast

Gast
man sollte immer statische factory methoden im hinterkopf behalten. die gestatten zum einen viel flexibilität, zum anderen haben sie den vorteil, benannt werden zu können.

Code:
class Foo
{
   public Foo( int i )
   {
      // irgendwas
   }

   public static Foo parseInt( final String str )
   {
        int i;
        // stell irgendwas tolles mit str an, prüfen, parsen etc.
        return new Foo( i );
   }
}
 
G

Gast

Gast
achso, und natürlich bieten diese statischen methoden auch den "vorteil", dass man zwecks einfacheren handlings z.b. intern ein NumberFormatException abfangen und stattdessen einfach null zurückgeben kann. für viele anwendungsfälle macht das code sehr viel übersichtlicher.
 

zero-2-one

Mitglied
Hab das jetzt auch mit ner statischen methode gelöst, allerdings hab ich meine Grundidee von int auf Integer umstellen müssen, um "null" als Ausnahmebedingung nutzen zu können. Naja, es läuft und ich bin glücklich und das mit der parsemethode ist ein angenehmes Standardmittel, das ich ab jetzt nutzen werde.

Code:
 public Zahlenausgabe(Integer x)
  {
    if (x == null)
    {
      this.wert = null;
      this.klartext = "ist keine Zahl";
    }
    else
    {
      this.wert = x;
      this.klartext = "";
      setKlartext();
    }
  }
  
  public Zahlenausgabe(String x)
  {
     this(parse(x));
  }
  
  private static Integer parse(String x)
  {
    Integer temp;
    try
    {
      temp = new Integer(x);
    }
    catch(Exception e)
    {
      temp = null;
    }
    return temp;
  }

Nochmal danke an die Unterstüzung von euch...[/quote]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A überladene Konstruktoren Java Basics - Anfänger-Themen 7
alderwaran überladene methoden mit allen möglichen typen aufrufen Java Basics - Anfänger-Themen 3
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
M Methodenaufrufe im Konstruktoren Java Basics - Anfänger-Themen 31
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Konstruktoren in Initialisierungsblöcke Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 25
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
C Die Klasse Menge mit Konstruktoren und einfachen Methoden Java Basics - Anfänger-Themen 5
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
G Was ist der Nutzen von generischen Konstruktoren? Java Basics - Anfänger-Themen 4
Q Methoden Konstruktoren anlegen Java Basics - Anfänger-Themen 5
B Objekte in Konstruktoren übergeben Java Basics - Anfänger-Themen 5
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Überladen von Konstruktoren Java Basics - Anfänger-Themen 2
V Konstruktoren Java Basics - Anfänger-Themen 15
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
F Konstruktoren Java Basics - Anfänger-Themen 4
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
Y Klassen, Vererbung, Konstruktoren Java Basics - Anfänger-Themen 13
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
C Erste Schritte Konstruktoren verstehen Java Basics - Anfänger-Themen 7
W OOP Konstruktoren Erklärung Java Basics - Anfänger-Themen 14
N Abarbeitungsreihenfolge von Konstruktoren Java Basics - Anfänger-Themen 12
O Klassen und Konstruktoren Java Basics - Anfänger-Themen 7
V Konstruktoren -> Funktionsaufrufe Java Basics - Anfänger-Themen 7
Q Konstruktoren und Methoden Java Basics - Anfänger-Themen 2
C Konstruktoren Java Basics - Anfänger-Themen 7
J Konstruktoren Java Basics - Anfänger-Themen 10
M Konstruktoren & Veerbung Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 6
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
R Vererbung Konstruktoren nicht erkannt Java Basics - Anfänger-Themen 17
H Klassen, Konstruktoren, Instanzen etc Java Basics - Anfänger-Themen 6
J OOP Konstruktoren, setMethode, getMethode usw. Java Basics - Anfänger-Themen 7
L Frage zu Konstruktoren und dem this Operator Java Basics - Anfänger-Themen 16
W 2 Konstruktoren Java Basics - Anfänger-Themen 8
B Vererbung und Konstruktoren Java Basics - Anfänger-Themen 33
N Vererbung von Konstruktoren mit Parametern Java Basics - Anfänger-Themen 7
S Konstruktoren verketten Java Basics - Anfänger-Themen 6
A Konstruktoren sollen sich gegenseitig aufrufen Java Basics - Anfänger-Themen 10
B Konstruktoren Sichtbarkeit Java Basics - Anfänger-Themen 2
K Kann man Private-Konstruktoren doch aurufen? Java Basics - Anfänger-Themen 8
E Konstruktoren und Methoden Java Basics - Anfänger-Themen 10
E OOP individual + standard-Konstruktoren Java Basics - Anfänger-Themen 9
S Konstruktoren? Java Basics - Anfänger-Themen 5
K Konstruktoren Java Basics - Anfänger-Themen 13
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
L Geschachtelte Konstruktoren Java Basics - Anfänger-Themen 4
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
J Vererbung und Konstruktoren Java Basics - Anfänger-Themen 14
J Problem mit Konstruktoren Java Basics - Anfänger-Themen 2
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
L Konstruktoren bei Vererbung Java Basics - Anfänger-Themen 13
D Blöde(?) Frage zu Konstruktoren und set-Methoden Java Basics - Anfänger-Themen 3
G Interface und Konstruktoren Java Basics - Anfänger-Themen 3
G Frage zu Konstruktoren Java Basics - Anfänger-Themen 12
G Verständnisfrage zu Konstruktoren Java Basics - Anfänger-Themen 5
G Konstruktoren Java Basics - Anfänger-Themen 9
A Konstruktoren überladen Java Basics - Anfänger-Themen 9
H Konstruktoren + Hilfe Java Basics - Anfänger-Themen 12
H Konstruktoren werden nie geerbt Java Basics - Anfänger-Themen 3
O Vor-/Nachteile/Unterschiede von Konstruktoren und Methoden Java Basics - Anfänger-Themen 3
Bierhumpen 2 Konstruktoren Java Basics - Anfänger-Themen 15
T mehrere Konstruktoren für eine Klasse Java Basics - Anfänger-Themen 7
J Instantvariablen und Konstruktoren Java Basics - Anfänger-Themen 2
Y Vererben - Konstruktoren Java Basics - Anfänger-Themen 2
Z übergabe von string[] an konstruktoren oder methoden Java Basics - Anfänger-Themen 3
L Klassen, Vererbung und Konstruktoren Java Basics - Anfänger-Themen 10
S Frage zu Konstruktoren Java Basics - Anfänger-Themen 7
G Problem mit Gültigkeit von Variabeln und Konstruktoren Java Basics - Anfänger-Themen 4
C Konstruktoren Java Basics - Anfänger-Themen 4
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
J Erste Schritte Konsolenausgabe in Datei umleiten Java Basics - Anfänger-Themen 22
J Möchte gern den Konsolen Output auf JTextPane umleiten Java Basics - Anfänger-Themen 4
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
H System.out umleiten Java Basics - Anfänger-Themen 5
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
F Textübergabe in Datei umleiten Java Basics - Anfänger-Themen 8
J System.out.printf in eine Datei umleiten ? Java Basics - Anfänger-Themen 4
W Ausgabe in Datei umleiten Java Basics - Anfänger-Themen 4
C Fehlermeldungen umleiten auf JDialog Java Basics - Anfänger-Themen 2
U Exception umleiten Java Basics - Anfänger-Themen 5
O Konsolenausgabe auf TextArea umleiten Java Basics - Anfänger-Themen 4
T Ausgabe von javac umleiten Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben