我遇到的问题很具体,有点难以解释。让我知道您是否需要任何详细信息。我有一个称为System
的抽象类。为了容纳我的System
对象,我有一个SystemManager
,其中包含一个System
列表以及一些用于操纵它的函数。其中包含:
List<System> systems = new ArrayList<System>();
现在,我要创建另一个抽象类,它是称为
System
的RenderSystem
的特定类型。这将从System
继承,但具有更多功能。我还想创建一个RenderSystemManager
,它应该执行SystemManager
的所有工作,除了一些额外的功能。另外,我希望管理器中没有System
列表,而是希望有RenderSystem
列表,以确保程序员不要在其中放置任何常规的System
对象。我最初的直觉是继承SystemManger
,只需将列表的类型更改为RenderSystem
:systems = new ArrayList<RenderSystem>();
Java不允许这样做,因为系统的类型是
System
而不是RenderSystem
。考虑到RenderSystem
是从System
继承的,我本来会确定的。我想解决此问题的一种方法是将所有代码从SystemManager
复制并粘贴到RenderSystemManager
,然后将代码行更改为:List<RenderSystem> systems = new ArrayList<RenderSystem>();
我的另一个本能是重写
addSystem(System system)
函数以确保它仅处理RenderSystem
,但是程序员可能会认为即使它不起作用,也可以这样做。@Override
public void addSystem(System system)
{
if (system instanceof RenderSystem)
{
super.addSystem(system);
}
}
这些似乎并不十分优雅。有人有什么建议吗?
最佳答案
您的经理与他们包装的清单具有相同的类型安全要求。因此,它们应遵循相同的策略,并且是通用类型:
public class BaseSystemManager<T extends System> {
private List<T> systems = new ArrayList<>();
public void addSystem(T system) {
systems.add(system);
}
// common methods
}
public class SystemManager extends BaseSystemManager<System> {
// methods specific to System handling
}
public RenderSystemManager extends BaseSystemManager<RenderSystem> {
// methods specific to RenderSystem handling
}
关于java - 特定的Java继承查询-需要建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22128565/