Hi Leute,
Gegeben seien 4 Klassen:
class Toy { }
class RubberDuck extends Toy { }
class TeddyBear extends Toy { }
class PlasticCar extends Toy { }
Ich will eine Klasse ToyFactory schreiben, welche eine Klassenmethode getToy besitzt,
die als Parameter den Namen der Toy-Klasse als String entgegennimmt,
von der die Fabrik eine Instanz erzeugen soll. Ich will in der Methode
die Switch-Anweisung verwenden, um abhängig vom übergebenen Klassennamen das
passende Toy-Objekt zu erzeugen und zurückzuliefern. Wenn ein String übergeben
wird, zu dem es in der Switch-Anweisung keinen Fall gibt, soll eine
IllegalArgumentException ausgelöst werden.
Nun meine Umsetzung:
Nun ergeben sich folgende Probleme:
1. Ist mein Konstruktor korrekt?
2. Bei den Zeilen zu den Unterklassen steht die Fehlermeldung
Implicit superconstructor ToyFactory.Toy() is undefined for default constructor. Must define an explicit constructor.
3. Ich weiss nicht genau, mit welchem Befehl ich ein Objekt einer Unterklasse erzeugen und zurückgeben soll (siehe in den jeweiligen cases).
Gegeben seien 4 Klassen:
class Toy { }
class RubberDuck extends Toy { }
class TeddyBear extends Toy { }
class PlasticCar extends Toy { }
Ich will eine Klasse ToyFactory schreiben, welche eine Klassenmethode getToy besitzt,
die als Parameter den Namen der Toy-Klasse als String entgegennimmt,
von der die Fabrik eine Instanz erzeugen soll. Ich will in der Methode
die Switch-Anweisung verwenden, um abhängig vom übergebenen Klassennamen das
passende Toy-Objekt zu erzeugen und zurückzuliefern. Wenn ein String übergeben
wird, zu dem es in der Switch-Anweisung keinen Fall gibt, soll eine
IllegalArgumentException ausgelöst werden.
Nun meine Umsetzung:
Java:
public class ToyFactory {
class Toy {
private String toyname;
Toy(String toyname) {
this.toyname = toyname;
}
void printToy() {
System.out.println("Toy");
}
}
class RubberDuck extends Toy {
void printRubberDuck() {
System.out.println("RubberDuck");
}
}
class TeddyBear extends Toy {
void printTeddyBear() {
System.out.println("TeddyBear");
}
}
class PlasticCar extends Toy {
void printPlasticCar() {
System.out.println("PlasticCar");
}
}
public Toy getToy(String toyname) {
switch (toyname) {
case "rubberduck":
return new ToyFactory.Toy(rubberduck);
break;
case "teddybear":
return new ToyFactory.Toy(teddybear);
break;
case "plasticcar":
return new ToyFactory.Toy(plasticcar);
break;
default:
throw new IllegalArgumentException();
break;
}
}
}
1. Ist mein Konstruktor korrekt?
2. Bei den Zeilen zu den Unterklassen steht die Fehlermeldung
Implicit superconstructor ToyFactory.Toy() is undefined for default constructor. Must define an explicit constructor.
3. Ich weiss nicht genau, mit welchem Befehl ich ein Objekt einer Unterklasse erzeugen und zurückgeben soll (siehe in den jeweiligen cases).