我试图使用抽象类,并对其进行所有扩展,以将子类传递给方法并返回相同的类。最好仅通过代码来解释。
public abstract class AbstractRequestReBuilder {
@Autowired
private CreditCardUpdateProcessor creditCardUpdateProcessor;
abstract BookingRequest rebuildRequest(BookingRequest request);
public BillingDetails updateCard(BillingDetails billingDetails) {
return creditCardUpdateProcessor.updateCreditCardInBillingDetails(billingDetails);
}
}
@Component
public class HotelRequestReBuilder extends AbstractRequestReBuilder {
public HotelBookingRequest rebuildRequest(HotelBookingRequest request) {
BillingDetails billingDetails = request.getBillingDetails();
BillingDetails modifiedBillingDetails = updateCard(billingDetails);
request.setBillingDetails(modifiedBillingDetails);
return request;
}
}
其中
public class HotelBookingRequest extends BookingRequest<RoomDetail> implements Serializable {
}
当前,我收到一个编译器错误,指出rebuildRequest
中未实现HotelRequestReBuilder
。任何人都可以请让我知道如何解决它。
答案 0 :(得分:0)
HotelRequestReBuilder.rebuildRequest(HotelBookingRequest)
不会覆盖AbstractRequestReBuilder.rebuildRequest(BookingRequest)
,它会使其过载。
最简单的解决方案是将HotelBookingRequest
设置为AbstractRequestReBuilder
的类型参数:
public abstract class AbstractRequestReBuilder<B extends BookingRequest<...>> {
abstract B rebuildRequest(B request);
}
并使用以下代码实现它:
public class HotelRequestReBuilder extends AbstractRequestReBuilder<HotelBookingRequest> {
public HotelBookingRequest rebuildRequest(HotelBookingRequest request) {
BillingDetails billingDetails = request.getBillingDetails();
BillingDetails modifiedBillingDetails = updateCard(billingDetails);
request.setBillingDetails(modifiedBillingDetails);
return request;
}
}
这将解决您的编译时问题。只需注意,您需要为BookingRequest<...>
使用适合AbstractRequestReBuilder
的抽象级别的适当的type参数