package staticassignment3;
public class Booking {
private String customerEmail;
private int seatsRequired;
private static int seatsAvailable;
private boolean isBooked;
static {
seatsAvailable = 400;
}
public Booking(String customerEmail, int seatsRequired) {
this.customerEmail = customerEmail;
this.seatsRequired = seatsRequired;
}
public String getCustomerEmail() {
return this.customerEmail;
}
public void setCustomerEmail(String customerEmail) {
this.customerEmail= customerEmail;
}
public int getSeatsRequired() {
return this.seatsRequired;
}
public void setSeatsRequired(int seatsRequired) {
this.seatsRequired = seatsRequired;
}
public static int getSeatsAvailable() {
return Booking.seatsAvailable;
}
public static void setSeatsAvailable(int seatsAvailable) {
Booking.seatsAvailable = Booking.seatsAvailable - this.seatsRequired;
}
public boolean isBooked() {
if(Booking.seatsAvailable>= this.seatsRequired) {
Booking.setSeatsAvailable(seatsAvailable);
this.isBooked = true;
}
else {
this.isBooked = false;
}
return isBooked;
}
}
在上面的Booking类中,我想通过使用静态方法setSeatsAvailable
来更新静态变量seatsAvailable
,但是我在其中传递了一个非静态变量,即this.seatsRequired
,这是不允许的。在不改变这么多代码的情况下,是否有其他方法可以更新seatsAvailable
?
package staticassignment3;
public class Tester {
public static void main(String[] args) {
Booking booking1 = new Booking("jack@email.com", 100);
Booking booking2 = new Booking("jill@email.com", 350);
Booking[] bookings = { booking1, booking2 };
for (Booking booking : bookings) {
if (booking.isBooked()) {
System.out.println(booking.getSeatsRequired()+" seats successfully booked for "+booking.getCustomerEmail());
} else {
System.out.println("Sorry "+booking.getCustomerEmail()+", required number of seats are not available!");
System.out.println("Seats available: "+Booking.getSeatsAvailable());
}
}
}
}
在上面的预订类中,我想通过使用setSeatsAvailable静态方法更新seatsAvailable静态变量,但我在其中传递非静态变量,即this。座位是不允许的。是否有其他方法可以实现更新后的seatsAvailable静态变量而无需对代码进行重大更改
调用静态方法时,没有关联的对象实例。因此,在静态方法中使用this
是无效的,因为this
指向当前对象(但您没有)。
具体来说,这个方法是不正确的:
public static void setSeatsAvailable(int seatsAvailable) {
Booking.seatsAvailable = Booking.seatsAvailable - this.seatsRequired;
}
如果想保持方法静态,可以向方法传递一个额外的参数——Booking
的一个实例——然后用booking.seatsRequired
替换this.seatsRequired
,如下所示:
public static void setSeatsAvailable(int seatsAvailable, Booking booking) {
Booking.seatsAvailable = Booking.seatsAvailable - booking.seatsRequired;
}