Konstruktor mit Rückgabe

  • Themenstarter Themenstarter Hendrik
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

Hendrik

Gast
Hallo,
ich möchte eine Klasse erstellen die im Konstruktor die Übergebenen Werte prüft und ggf. eine Fehler zurück giebt! Ist das möglich?
Gruss HP
 
schonmal was von exceptions gehört?
Code:
class Foo {

public Foo(int bar) {
if( bar < 0 ) throw new IllegalArgumentException("Param 'bar' must be positive!"); 
//tu wat
}
}
8)
 
exceptions sind gut. aber steure dein programm nie über die exceptions. dies ist unschön und unleserlich.
 
Ich finde das mit den Exceptions nicht unschön.
Gibt es eine bessere Alternative?

Vielleicht die Validierung nicht im Konstruktor durchführen, sondern in einer separaten Methode, die von aussen angestossen wird.

JT
 
Mach doch deinen Konstruktor privat - somit kann ihn keiner direkt aufrufen. Dann noch eine statische methode z.B.
Code:
public static MeineKlasse createInstance()
der du alle Parameter mitgibst ... die methode prüft die Parameter ... wenn alles ok ist erzeugst du das Objekt (darfst du ja, da du ja in der selben Klasse bist) und gibst das Objekt zurück. wenn es Probleme gibt, gibst du null zurück. Nun muss der Aufrufer nur noch den Rückgabewert richtig auswerten.
Fertig.
 
hab ich mal gelesen das man ein programm nicht mit exceptions steuern darf. anscheinend ist dies eine, wie nennt man das schon wieder, nicht ofizelle regel :?

entweder versuchts du das auserhalb zu erledigen oder machst es wie schon erwähnt über den singleton. kannst natürlich auch das objekt erzeugen und dann eine methode aufrufen, die dir diese prüfung durchführt
 
Es geht wohl darum, dass Exceptions für grobe Fehler reserviert bleiben sollen.
z.B. wenn man die Grösse eines Rechteckes auf -1/-3 setzen will.
 
@Beni: äh.. und was ist wenn Hendrik jetzt wirklich ein Rechteck in seiner Klasse zeichnen will ? wir wissen ja nicht was hendrik vorhat 🙂 .
und wenn man einer klasse halt nur positive zahlen übergeben darf, dann ist eine IllegalArgumentException auch dazu da, und da gibt's keine differenzierung zwischen "groben" und "nicht groben" fehlern ....
 
Hallo,

hab über Suchen schon einiges gelesen, aber ich konnte das auf mein Beispiel noch nicht Anwenden.
Ich müsste auf ein ArrayList einer anderen Klasse zugreifen, bzw. es über return zurückbekommen.
Nur ich bekomme dann immer Fehlermeldungen, wie ich mit meinem beschränkten halbwissen meine, das es richtig sein müsste.

ArrayList canvas = new ArrayList();
Senden senden = new Senden( c, posit );
// canvas = new Senden(c, posit);

Klasse mit dem ArrayList:

Socket s = new Socket(ip, port);

PrintStream outToServer = new PrintStream(s.getOutputStream());
outToServer.println("1");

BufferedReader in = new BufferedReader
(new InputStreamReader(s.getInputStream()));
ArrayList groesse = new ArrayList();
while ((line = in.readLine()) != null ){
ausgabetext = line;
groesse.add(ausgabetext);
}


Mit canvas dachte ich mir, könnte ich evtl. über ein return der arrayliste diese auffangen, aber angeschmiert.
über klassenname.groesse kann ich halt auch nicht auf die arrayliste zugreifen.
Hoffe ich konnte mein Problem hier etwa veranschaulichen.
Falls etwas unklar sein sollte, weswegen ihr mir nicht helfen könnt, einfach Fragen stellen.
 
:?: ´
nur so aus reiner neugier: was hat das jetzt mit dem thread hier zu tun?
 
Falls etwas unklar sein sollte...

Allerdings (und ich denke da nicht nur an die Bemerkung von Roar)

1. Was ist "Senden"? Von was erbt es, was soll es?
2. Schon bemerkt, dass man in diesem Forum Code mit [ code ] und [ /code ] umklammern kann? (Das Syntaxhighlighting macht viele Menschen hilfsbereiter :wink: )
3. Was für eine Fehlermeldung bekommst Du? Von wem? Wann?
4. Wenn Du Code postest, dann bitte so, dass man die grösseren Zusammenhänge erkennen kann :wink: (ich weiss, das ist nicht so einfach. Im Zweifellsfalle einfach mal zuviel posten, die Leute werden schon reklamieren wenn's zuviel ist). Ich weiss nämlich absolut nicht, wie deine beiden Schnippsel zusammenpassen (ja, ok, ich hab eine Vermutung, aber die könnte falsch sein. Und bevor ich den Aufwand mache eine Riesenlösung zu posten, will ich sicher sein, dass sie überhaupt gesucht wird)

mfg Beni
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben