【发布时间】:2019-08-20 16:58:26
【问题描述】:
我有3个接口大致如下:
IData 环绕所需数据 IDataInfo 以提供有关 IData 和
IDataProvider
{
IData GetData(IDataInfo iDataInfo);
}
对于上述接口,我有几个派生接口系列。例如:
-
IBikeData : IData、IBikeDataInfo : IDataInfo和IBikeDataProvider : IDataProvider -
ICarData : IData、ICarDataInfo : IDataInfo和ICarDataProvider : IDataProvider等等。
现在,在IBikeDataProvider 和ICarDataProvider 的IData GetData(IDataInfo iDataInfo) 的具体实现中,我需要将传入的iDataInfo 参数类型转换为各自的派生类型(IBikeDataInfo 和ICarDataInfo),以便其他访问其他特定功能。我对每个具体实现中的这种类型转换有点不舒服,我认为这是不正确的做法。有没有办法可以重构我的设计来防止这种情况发生?
【问题讨论】:
-
具体类不应以
I开头 - 通常表示接口。 -
如果您的实现需要特定类型,则不应将其定义为采用接口。为您所引用的接口和类提供示例代码也可能更有帮助,尤其是显示您想要避免的强制转换操作的代码。
-
很抱歉将它们作为具体类型提及。它们基本上是派生接口,将由各自的类具体化。
-
我想要接口,因为有另一个模块,比如调度程序,我需要在不知道实际类型的情况下以相同的方式处理几个派生的接口系列。
标签: java c# interface polymorphism refactoring