【问题标题】:How do I pass an object created in one class to another in java?java - 如何将在一个类中创建的对象传递给另一个类?
【发布时间】:2013-12-16 17:16:05
【问题描述】:

我正在尝试开发一个在线酒店预订系统。我有一个主类,它接受用户的输入,例如他们的姓名、付款信息和其他数据字段,并使用该信息创建一个Reservation 对象。我有另一个名为Room 的类,它为每个Room 对象提供Reservations 的列表。我遇到的问题是我找不到将Reservation 对象添加到Room 对象列表中的方法。以下是部分代码:

public class HotelReservationSystem
{
    private Reservation reservation;

    public void makeReservation(int checkIn, int checkOut)//Other parameters
    {
        reservation = new Reservation(checkIn, checkOut);
    }
}

public class Room
{
    private ArrayList<Reservation> reservations;

    public void addReservation(//parameters?)
    {
        reservations.add(//parameter?);
    }
}

我不知道如何让新的Reservation 对象作为add 类中add 方法的参数传递。 我只是无法理解它,希望有人能帮助我慢慢思考。

感谢您的帮助。

【问题讨论】:

  • 呃,你会使用参考。可能将其作为参数传递给 addReservation。
  • 很可能你不应该有reservation实例变量,但应该携带那个引用(你传递给addReservation的那个)作为你的方法中的一个局部参数,它正在编排整个“创建预订”操作。
  • 将 HotelReservationSystem 想象成一张实体办公桌。只有一个。桌子上有一堆小房间,每个房间一个。当你创建一个 Reservation 时,你把它放在适当的小房间里。桌子上没有一个地方是单一预订的,除非是在职员 (makeReservation) 临时将其写下来时,并且该预订完全保留在 makeReservation 内,直到它被归档到房间中。
  • 我是一个视觉学习者,所以物理办公桌的例子确实帮助我理解了如何实现设计。感谢您的不同观点!
  • 我认为将这类事情视为一个物理过程总是有用的。一旦你掌握了它,你也许可以将它简化为某种数学模型,但你需要先得到那个“句柄”。

标签: java parameters parameter-passing


【解决方案1】:

相信你一定试过这个

public void addReservation(Reservation reservation)
{
    reservations.add(reservation);
}

但这里的问题是您的列表reservations 为空并且会抛出空指针异常。所以最好在声明时初始化它。所以改变这个

private ArrayList<Reservation> reservations;

private ArrayList<Reservation> reservations = new ArrayList<Reservation>();

Hotel 类的makeReservation 方法中执行以下操作:

Room room = new Room();
room.addReservation(reservation);

【讨论】:

    【解决方案2】:

    让 makeReservation 返回创建的 Reservation 对象:

     public Reservation makeReservation(int checkIn, int checkOut)//Other parameters
    {
        reservation = new Reservation(checkIn, checkOut);
        return reservation;
    }
    

    (您也可以为reservation 创建一个getter)

    然后像这样更改您的 addReservation:

    public void addReservation(Reservation res)
    {
        reservations.add(res);
    }
    

    然后像这样添加它:

    HotelReservationSystem hrs = new HotelReservationSystem();
    Reservation res = hrs.makeReservation();
    Room room = new Room();
    room.addReservation(res);
    

    但是,您可能需要重新考虑您的模型。现在你的HotelReservationSystem 正在创建一个预订,只保存那个,覆盖旧的。如果您创建多个,会发生什么?另外,如何获得给定 HotelReservationSystem 对象的某个房间的预订?只是有些事情要考虑...

    【讨论】:

    • 从我提供的信息中我知道模型看起来不太好,但我只需要回答具体问题。我遗漏了许多与问题无关的其他代码。我设置它的方式是客户输入他们的信息。该信息用于预订。该预订存储在房间本身包含的列表中。存储后,实施的其余部分会为下一个用户重置,但房间的列表会保留。
    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多