Also im Grunde habe ich eine Klasse mit einem Konstruktor, insbesondere sagen, ein Konstruktor für Staaten. Ich kann nur einen neuen Status erstellen, wenn ich im Konstruktor eine Stadttypregion habe (State hat 2 Konstruktoren, beide akzeptieren Name und Region).Verwenden Sie "versuchen und fangen" mit dem Erstellen eines neuen Objekts
Der Code sieht wie folgt aus:
public State(String Name, int Population, Region Capital) throws IllegalArgumentException {
super(Name, Population);
if(!(Capital.getRegionType() == RegionType.CITY)){
System.out.println("ERROR");
throw new java.lang.IllegalArgumentException();
}
this.Capital = Capital;
}
Der Typ der Region definiert ist, eine Enum-Klasse. Das Problem ist, wenn ich eine neue Funktion in der Testklasse (Hauptklasse) erstellen
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE); //
try{
State s2 = new State("Khemed", Region3); // This should not be possible because Region3 is a VILLAGE instead of a CITY
}catch(IllegalArgumentException e){
}
s2.addRegion(Region2);//Doesn´t work - Error
s2.addRegion(Region1);//Doesn´t work - Error
Das ist im Grunde meines Problem, die zwei letzten Zeilen gibt mir eine Fehlermeldung, dass ich habe die Variable s2 intialized.
Ich habe versucht, den Code ohne "versuchen und fangen" zu sehen, ob die if-Anweisung, die ich im Konstruktor habe funktionieren würde, aber es nicht funktioniert.
Die Methode "add" ist eine Methode, die in der Super-State-Klasse (Contry) definiert ist, die es einfach erlaubt, States hinzuzufügen.
Hoffe, du kannst helfen, weil ich nicht sehen kann, wie ich das lösen kann.
ADDED (Angeforderte meine Frage zu beantworten)
Klasse Region:
public class Region {
private String name;
private int population;
private RegionType regionType;
public Region(String name, int population, RegionType regionType){
this.name = name;
this.population = population;
this.regionType = regionType;
}
//get Region Type
public RegionType getRegionType(){
return regionType;
}
Enum mit Region Art:
public enum RegionType {
CITY,
VILLAGE,
TOWN,
}
Sie sollten die Namensregeln von Java-Bezeichner folgen, so dass es einfacher ist, zu lesen, Ihre Code. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html – sebenalern
Also, Sie werfen eine 'IllegalArgumentException', was würde dann eine' EmptyStackException' fangen? –