基本的には、コンストラクタを持つクラス、特に状態のコンストラクタがあります。コンストラクタで都市型領域(州に2つのコンストラクタがあり、の両方が名前と地域を受け入れる)がある場合にのみ、新しい状態を作成できます。"try and catch"を使って新しいオブジェクトを作成する
コードは次のようになります
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;
}
領域のタイプは、列挙クラスを使用して定義されます。私は基本的に私の問題だテストクラス(メインクラス)
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
、2つの最後の行に新しい関数を作成するときに問題がある、私は、変数S2をintialized haven't言って私にエラーを与えます。
"try and catch"せずにコードを実行して、コンストラクターでif文が動作するかどうかを確認しましたが、それは動作しませんでした。
メソッド "add"はスーパークラスの状態(Contry)で定義されたメソッドであり、単純に状態を追加することができます。
私はこれをどのように解決できるか見ることができないため、あなたが助けてくれることを願っています。
ADDED(私の質問に答えることを要求された)
クラスリージョン:2番目のコードブロックで
public enum RegionType {
CITY,
VILLAGE,
TOWN,
}
をごコード。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables。html – sebenalern
だから、あなたは 'IllegalArgumentException'を投げ、' EmptyStackException'を捕まえるでしょうか? –