Objekterstellung abbrechen?

MOEP_BIBER

Aktives Mitglied
Hallo hab schon wieder ne Frage^^

Wenn man zum Beispiel eine begrenzte Anzahl an Objekten haben möchte, so muss man einen Counter bei Erstellung des Objekts hochzählen lassen, den Konstruktor private machen und die Objekterstellung über eine Methode laufen lassen.

Ist es möglich die Objekterstellung in einem Konstruktor selber abzubrechen?
Also den Konstruktor public zu lassen und dort die Fallunterscheidung vornehmen?

heir nochn bisschen code:

Java:
private Haustier(String name) {
        this.name = name;
    }

    public static Haustier haustierCreator(String name) {
        if(anzahl < 4) {
            anzahl++;
            return new Haustier(name);
        }
    }

so ähnlich mein ich das:
Java:
public Haustier(String name)
    {
        this.name = name;
        if(anzahl < 4) {
            anzahl++;
            machHaustier(name);
        }
        else
        {
            machKeinHaustier();
        }
    }


MfG Biber
 
Zuletzt bearbeitet:
nein, meines Wissens nach nicht. Die Konzeption wäre dann so schon richtig (nehme mal an anzahl ist ein staticattribut von Haustier). getInstance wäre vllt der korrekte Name der Methode.
 
wenn eine Exception geworfen wird, erhält der Aufrufer kein fertig erstelltes Objekt,
die evtl. zu setzende Variable bleibt bei null bzw. beim vorherigen Wert,
reicht das?
 
Klar geht das, du musst nur eine Exeption throwen lassen.

Java:
public Haustier(String name) throws RuntimeException
{
	this.name = name;
	if(anzahl >= 4)
		throw new RuntimeException("Cannot create more pets.");
	macheHaustier();
}

Die Runtime hat den Vorteil, dass du sie bei Bedarf abfangen kannst, aber nicht gezwungen bist.
 
alles klar danke =)

noch ne frage:

sind in einer abstrakten Klasse automatisch alle Methoden abstrakt? nicht oder?
Man kann ja auch eine Klasse abstrakt erklärn ohne dass man auch nur eine Methode abstrakt macht oder?

MfG Biber
 
sind in einer abstrakten Klasse automatisch alle Methoden abstrakt? nicht oder?
Man kann ja auch eine Klasse abstrakt erklärn ohne dass man auch nur eine Methode abstrakt macht oder?
für den Fall, dass ich in dem Thread noch was richtiges von mir gebe: Ja, das stimmt so 😉

Eine abstrakte "Klasse" bei der alle Methdoen "abstrakt" sein müssen, ist dann ein Interface aber da kann man sich das "abstrakt" dann auch sparen - weil es eh automatisch alle sind 🙂
 
Wenn abstrakte Methoden vorhanden sind, dann muss auch die Klasse abstrakt sein. Aber nicht umgekehrt. Du kannst also auch eine abstrakte Klasse haben, die ganz normale statische Methoden hat.
 
Zuletzt bearbeitet:

Zurück
Oben