I cannot correctly determine the general method when using covariance in a generic class, if at all possible, as I intend. I will best explain the problem with an example.
Say we have the following interface setup for cars
interface Car { ... }
interface SportsCar extends Car { ... }
and such common interfaces for car sellers returning an object Sale
interface CarVendor<C extends Car> {
Sale<C> sell(C car);
}
interface SportsCarVendor extends CarVendor<SportsCar> {
@Override
Sale<SportsCar> sell(SportsCar car);
}
Suppose we want our cars to be shared, for example. regarding fuel type:
interface Car<F extends FuelType> { ... }
interface SportsCar<F extends FuelType> extends Car<F> { ... }
class PetrolSportsCar extends SportsCar<Petrol> { ... }
class DieselSportsCar extends SportsCar<Diesel> { ... }
, . , , Car<?> , FuelType . :
interface CarVendor<C extends Car<?>> {
<F extends FuelType> Sale<Car<F>> sell(Car<F> param);
}
interface SportsCarVendor extends CarVendor<SportsCar<?>> {
@Override
<F extends FuelType> Sale<SportsCar<F>> sell(SportsCar<F> param);
}
SportsCarVendor, , , sell(SportsCar<F>) SportsCar<?>.
- ?