例如,假设我有一个班级
class Engine {
int horsepower;
...
}
和子类
class EngineTurbo extends Engine {
Some turbineProperty;
...
}
另一方面,我有一个类(有一些List返回方法)
class Plane {
Engine[] planeEngines;
...
public List<Engine> getListOfEngines() { ... }
}
这是我的问题,有这个子类:
class PlaneTurbo extends Plane {
EngineTurbo[] planeEngines; // yes or no?
...
public PlaneTurbo(int quantity){
planeEngines = new EngineTurbo[quantity]; // yes? or...
super.planeEngines = new EngineTurbo[quantity];
}
public List<EngineTurbo> getListOfEngines() { ... } // best practices here
}
我想了解返回列表中的最佳做法&lt; SubClass&gt;案件。 我找到了一些关于使用List&lt;的答案。 ?扩展引擎&gt;和那样的东西
同样发现这个很棒的help (I share with all of you),但我仍在为这个案例寻找最佳解决方案
由于
啊,顺便说一句,在所有这些之后,我有另一个类(不是子类,或者也许是),像......
class HangarOnlyTurboPlanes {
List<PlaneTurbo> turboPlanes; // only PlaneTurbo, not need Plane
...
public void someLogicInvolvingOnlyTurboPlanes(){
List<EngineTurbo> engines = turboPlanes.get(some).getListOfEngines();
...
}
}
如果你问为什么,我和#34; TURBO&#34;应用程序,但我喜欢保持它对未来的另一个upperClass应用程序(可能只是Hangar)和/或siblingClass应用程序(可能是SpaceEngineHangar无论如何)开放
再次感谢
答案 0 :(得分:1)
您的示例是泛型的候选者。 Plane将引用不具体的Engine
,而是引用由Engine
的子类指定的Plane
的泛型子类。
将您的Plane
更改为通用:
public class Plane<E extends Engine> {
E[] planeEngines;
public List<E> getListOfEngines() {return Arrays.asList(planeEngines);}
}
然后在您的子类中,您所要做的就是指定Engine
的具体类型,而不需要定义一个新变量来保存EngineTurbo
列表:
public class PlaneTurbo extends Plane<EngineTurbo> {
public PlaneTurbo(int quantity) {
planeEngines = new EngineTurbo[quantity];
}
}
最后,您可以从EngineTurbo
获取PlaneTurbo
,而无需定义仅返回EngineTurbo
或某种类型的广告投放的新方法:
PlaneTurbo pt = new PlaneTurbo(5);
List<EngineTurbo> ets = pt.getListOfEngines();