在涉及列表<class/subclass> return 方法的JAVA (android) 中,class/subclass 分别与另一个class/subclass 组合的最佳实践
Best practices for class/subclass composite of another class/subclass respectively in JAVA (android) which involve list<class/subclass> return methods
例如,假设我有一个 class
class Engine {
int horsepower;
...
}
和子class
class EngineTurbo extends Engine {
Some turbineProperty;
...
}
另一方面,我有一个 class(使用一些 List return 方法)
class Plane {
Engine[] planeEngines;
...
public List<Engine> getListOfEngines() { ... }
}
这是我的问题,有这个子class:
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
}
我想了解 return List < SubClass > 案例的最佳实践。
我找到了一些关于使用 List < ?扩展引擎 > 和类似的东西
也发现这个很棒 help (I share with all of you) 但我仍在为这种情况寻找最佳解决方案
谢谢
啊,顺便说一句,在所有这些之后我还有另一个 class(不是 subclass,或者可能是),比如...
class HangarOnlyTurboPlanes {
List<PlaneTurbo> turboPlanes; // only PlaneTurbo, not need Plane
...
public void someLogicInvolvingOnlyTurboPlanes(){
List<EngineTurbo> engines = turboPlanes.get(some).getListOfEngines();
...
}
}
如果你问为什么,我正在使用 "TURBO" 应用程序,但我希望它对未来的另一个上层应用程序(可能只是 Hangar)保持开放 and/or siblingClass 应用程序(可能是 SpaceEngineHangar随便)
再次感谢
您的示例是泛型的候选示例。其中 Plane 将引用的不是具体的 Engine
,而是 Engine
的泛型子类,由 Plane
的子 类 指定。
将您的 Plane
更改为通用的:
public class Plane<E extends Engine> {
E[] planeEngines;
public List<E> getListOfEngines() {return Arrays.asList(planeEngines);}
}
然后在你的子类中,你所要做的就是指定 Engine
的具体类型,而不需要定义一个新变量来保存 EngineTurbo
list:
public class PlaneTurbo extends Plane<EngineTurbo> {
public PlaneTurbo(int quantity) {
planeEngines = new EngineTurbo[quantity];
}
}
最后,您可以从 PlaneTurbo
获取 EngineTurbo
,而无需定义仅 returns EngineTurbo
或某种类型的转换的新方法:
PlaneTurbo pt = new PlaneTurbo(5);
List<EngineTurbo> ets = pt.getListOfEngines();
例如,假设我有一个 class
class Engine {
int horsepower;
...
}
和子class
class EngineTurbo extends Engine {
Some turbineProperty;
...
}
另一方面,我有一个 class(使用一些 List return 方法)
class Plane {
Engine[] planeEngines;
...
public List<Engine> getListOfEngines() { ... }
}
这是我的问题,有这个子class:
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
}
我想了解 return List < SubClass > 案例的最佳实践。 我找到了一些关于使用 List < ?扩展引擎 > 和类似的东西
也发现这个很棒 help (I share with all of you) 但我仍在为这种情况寻找最佳解决方案
谢谢
啊,顺便说一句,在所有这些之后我还有另一个 class(不是 subclass,或者可能是),比如...
class HangarOnlyTurboPlanes {
List<PlaneTurbo> turboPlanes; // only PlaneTurbo, not need Plane
...
public void someLogicInvolvingOnlyTurboPlanes(){
List<EngineTurbo> engines = turboPlanes.get(some).getListOfEngines();
...
}
}
如果你问为什么,我正在使用 "TURBO" 应用程序,但我希望它对未来的另一个上层应用程序(可能只是 Hangar)保持开放 and/or siblingClass 应用程序(可能是 SpaceEngineHangar随便)
再次感谢
您的示例是泛型的候选示例。其中 Plane 将引用的不是具体的 Engine
,而是 Engine
的泛型子类,由 Plane
的子 类 指定。
将您的 Plane
更改为通用的:
public class Plane<E extends Engine> {
E[] planeEngines;
public List<E> getListOfEngines() {return Arrays.asList(planeEngines);}
}
然后在你的子类中,你所要做的就是指定 Engine
的具体类型,而不需要定义一个新变量来保存 EngineTurbo
list:
public class PlaneTurbo extends Plane<EngineTurbo> {
public PlaneTurbo(int quantity) {
planeEngines = new EngineTurbo[quantity];
}
}
最后,您可以从 PlaneTurbo
获取 EngineTurbo
,而无需定义仅 returns EngineTurbo
或某种类型的转换的新方法:
PlaneTurbo pt = new PlaneTurbo(5);
List<EngineTurbo> ets = pt.getListOfEngines();