我有一个定义“模块”的接口:
public interface AIMModule {
// Details not relevant
}
另一个为这些模块定义了一个容器:
public interface AIMModuleContainer {
public void addModule( AIMModule module );
}
这些“模块”实际上是 GUI 构造,因此我的容器的实现扩展了我正在使用的 GUI 工具包的 HLayout 小部件。它包含一个名为 moduleStack 的 SectionStack。SectionStack.addSection( SectionStackSection ) 将一个节堆栈添加到 GUI 中,因此我的“模块”容器抽象如下所示:
public class UserContainer extends HLayout implements AIMModuleContainer {
@Override
public void addModule( AIMModule module )
{
moduleStack.addSection( (SectionStackSection)module );
}
}
因此,模块实现扩展了一个名为 SectionStackSection 的小部件:
public class AccountInformationModule extends SectionStackSection implements AIMModule {
// Details not relevant
}
问题是在调用 addSection() 的 addModule() 中进行转换。AIMModuleContainer 包含 AIMModule,因此 addModule() 需要获取 AIMModule。但是在实现层面,moduleStack小部件插入了一个SectionStackSection,所以接口的“模块”需要根据实现进行强制转换。
这行得通,但感觉不对。如果有人通过扩展 SectionStackSection 以外的东西来实现我的 AIMModule 接口并将该 AIMModule 传递给 addModule(),那么该转换将中断。这似乎不对。
这是坏了吗?如果是,修复它的方法是什么?