2017-04-15 10 views
0

都市と状態フィールドを含むLocationクラスを作成しました。次に、他の住所フィールドと電話番号を含むHotelクラスを作成しました。最終目標は、1つの場所に複数のホテルを追加できるようにすることです。ホテルのコンストラクタを使用して作成した位置インスタンスを渡したいと思っています。これを行う最善の方法は何ですか?コンストラクタ内のオブジェクトの特定のインスタンスを渡す

package reservations; 

public class Test { 
    public static void main(String [] Args){ 

     addLocations(); 
     addHotels(); 
     ReservationDisplay check = ReservationDisplay.getInstance(); 
     check.getUserInfo(); 

    } 

    public static void addLocations(){ 
     Location dc = new Location("Washington", "DC"); 
     Location cali = new Location("San Francisco", "CA"); 
     Location ny = new Location("Ney York", "NY"); 
     Location vegas = new Location("Las Vegas", "NV"); 
     Location miami = new Location("Miami", "FL"); 
    } 

    public static void addHotels(){ 

     Hotel mgm = new Hotel("Blah", "1234 Blvd", "55555", "(999)-999-9999", vegas); 
    } 
} 
+0

私はデザインに同意していません。 2つの異なるホテルは同じ_exact_アドレスにない可能性が最も高いです。あなたのデータベーステーブルをモデル化していたなら、あなたはおそらくアドレスのための別のテーブルを保持しません。 –

+0

@TimBiegeleisen 'Location'はCity/Stateのみを保持しているので、実際には' City'の誤称です。同じ都市の2つのホテルは論理的です。 Locationクラスの名前は誤解を招きます。 – twain249

答えて

0

ロケーションを取るHotelクラスのコンストラクタを作成します。この

public Hotel(Location l, <other fields>) 
{ 
    // Set other fields 
    this.location = l; 
    l.addHotel(this); 
} 

このような

何かがフィールドが、それは場所と場所のホテルで保持する場所クラスのaddHotel(Hotel h)方法だ保持するためにホテルのクラスであることを前提としています。あなたのホテルを作成する際、作成した場所への参照を持っている必要があります

あなたのホテルを作成しているときに、あなたがこのようにそれらを呼び出します::

Hotel h = new Hotel(ny, <otherfields>); 

EDIT:

あなたがそれらフィールド変数(直接またはそれらのすべてを格納するためのリスト/マップの作成)

何か作るために必要な機能のaddLocations()目に見える外で作成した場所を作るためにこれ以降は次のようになります:

public class Test { 
    private static Map<String, Location> locations = new HashMap<String, Location>(); 
    // Or list or straight variables or other way of holding the locations 
    // Some structure to hold the hotels will be necessary too 


    public static void addLocations() 
    { 
     locations.put("Washington", new Location("Washington", "DC")); 
     // Same line for other locations 
    } 


    public static void addHotels() 
    { 
     Hotel h = new Hotel(locations.get("Washington"), <other fields>); 
     // Add the hotel to the list/map whatever of hotels to use it elsewhere 
    } 
+0

これは基本的に私が試みたものですが、 "vegasは変数に解決できません"と私に伝えています。 addLocationsブロックでvegasを宣言し、変数が有効範​​囲外であることが原因であると確信していますが、その回避方法はわかりません。 – oznomal

+0

@oznomal合理的に聞こえる。必要なのは、location addLocationsメソッドの外に位置を表示できるようにすることです。私はそれを示すために私の答えを編集します。 – twain249

0

私はあなたの例でやっている方法は問題ないと思います。データベースでモデル化する場合は、ホテルテーブルに郵便番号だけを残し、郵便番号を都市名にマッピングする別のテーブルを作成します。 私はあなたのやり方でこれをあなたのオブジェクトにマップするのは大丈夫だと言っています。

関連する問題