如何通过将相同变量和非静态变量的参数传递到java的静态函数中来更新静态变量?


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

最新更新