【发布时间】:2020-11-18 07:17:50
【问题描述】:
我已经尝试过使用泛型做一些事情,但我个人似乎找不到任何简单的解决方案。尽管如此,我仍然认为将这 3 种类似的方法搁置一旁是一种罪过。
public List<PassengerPlane> getPassengerPlanes() {
List<PassengerPlane> passengerPlanes = new ArrayList<>();
for (Plane plane : planes) {
if (plane instanceof PassengerPlane) {
passengerPlanes.add((PassengerPlane) plane);
}
}
return passengerPlanes;
}
public List<MilitaryPlane> getMilitaryPlanes() {
List<MilitaryPlane> militaryPlanes = new ArrayList<>();
for (Plane plane : planes) {
if (plane instanceof MilitaryPlane) {
militaryPlanes.add((MilitaryPlane) plane);
}
}
return militaryPlanes;
}
public List<ExperimentalPlane> getExperimentalPlanes() {
List<ExperimentalPlane> experimentalPlanes = new ArrayList<>();
for (Plane plane : planes) {
if (plane instanceof ExperimentalPlane) {
experimentalPlanes.add((ExperimentalPlane) plane);
}
}
return experimentalPlanes;
}
【问题讨论】:
-
如何引入作为
Plane抽象一部分的PlaneType枚举。它使过滤就像比较所需的平面类型一样容易。当然,这仍然需要转换过滤后的实例。 -
问题是你的“飞机”是如何形成的。当您创建“飞机”集合时,您是否已经将它们分类到地图或不同的列表中?
-
您应该编辑您的问题以在标题中包含“通用”。这将使有类似问题的其他人更容易找到它。
-
@Glains 是的,我同意,我想过,但感觉好像还有另一种方法
-
您在使用泛型时遇到了哪些具体问题?如果
instanceof是唯一的问题,那么这可能与Java: Instanceof and Generics 重复