在构造函数中传递对象的特定实例

时间:2017-04-15 14:03:09

标签: java constructor

我创建了一个包含城市和州字段的Location类。然后我创建了一个包含其他地址字段和电话号码的酒店类。最终目标是能够将多个酒店添加到一个位置。我想通过酒店构造函数传递我创建的位置实例,这样做的最佳方法是什么?

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);
    }
}

2 个答案:

答案 0 :(得分:0)

在Hotel类中创建一个接收位置的构造函数。

像这样的东西

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

这假设酒店类中有一个字段用于保存它的位置,并且在Location类中有一个addHotel(Hotel h)方法来保存位置的酒店。

然后,当您创建酒店时,您会将它们称为::

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

您需要在创建酒店时引用您创建的位置。

编辑:

要使您在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
   }

答案 1 :(得分:0)

我认为你在你的例子中的表现似乎没问题。如果您要在数据库中对其进行建模,则只保留酒店表中的邮政编码,然后使用另一个表格将邮政编码映射到城市名称。 我会说按照你的方式做到这一点是一种将它映射到你的对象的好方法。