java泛型类型作为抽象方法的参数?
我会尽可能地问这个问题,不要用双关语
假设我有一个对象“车库”,它作为汽车的容器。它看起来像这样:
public abstract class Garage {
public abstract List<? extends Car> getCars();
public abstract void addCarToGarage(Car car);
}
因为我很富有,我会有不同类型的车库,一些只装我的跑车,另一个只装我的SUV等等
我的一个车库看起来像这样:
public class SportCarGarage extends Garage {
@Override
public List<SportCar> getCars() {
// code to return the cards
}
@Override
public void addCarToGarage(Car car){
// code to add car to garage
}
}
现在你可能已经看到我的问题了。我可以实现getCars()
,这样它将返回一个SportCar
列表。但是如果我调用addCarToGarage
,我需要检查每辆车的类型,如果有人试图在我的SportCarGarage中添加SUV,我不会得到语法错误
我想要这样的东西:
public abstract class Garage {
public abstract List<? extends Car> getCars();
public abstract void addCarToGarage(? extends Car car);
}
但这只会给我一个语法错误。我想有一个简单的解决办法,我只是不知道该找什么。希望你能帮忙
# 1 楼答案
您可以将
Garage
设为泛型,并在addCarToGarage
方法中重新使用该类型:然后,
SportCarGarage
将如下所示:# 2 楼答案
当然,您只需将车库设置为通用:
那你就可以了
我将类保留为抽象类,但也许您不需要再创建子类,只是为了适应不同类型的汽车
现在看来,您至少可以以通用的方式实现这两种方法
如果你真的想要专门的子类,你可以这样做
# 3 楼答案
您需要参数化整个类
这还将确保在所有方法之间使用一致的类型
编辑:打字错误
# 4 楼答案
你不是基本上只想要以下几点吗
及