gpt4 book ai didi

java - 我可以避免将接口(interface)方法参数类型转换为同一系列类的具体类型吗?

转载 作者:行者123 更新时间:2023-12-02 01:27:03 28 4
gpt4 key购买 nike

我有3个接口(interface),大致如下:IData 包装所需数据 IDataInfo 以提供有关 IData

的元数据
IDataProvider
{
IData GetData(IDataInfo iDataInfo);
}

我有上述接口(interface)的几个派生接口(interface)系列。例如:

  1. IBikeData:IDataIBikeDataInfo:IDataInfoIBikeDataProvider:IDataProvider
  2. ICarData : IDataICarDataInfo : IDataInfoICarDataProvider : IDataProvider 等等。

现在,在 IBikeDataProviderICarDataProviderIData GetData(IDataInfo iDataInfo) 的具体实现中,我需要对传入的 进行类型转换iDataInfo 参数传递给相应的派生类型(IBikeDataInfoICarDataInfo),以便其他人访问其他特定功能。我对每个具体实现中的这种类型转换感到有点不舒服,我认为这不是正确的做法。有没有办法重构我的设计来防止这种情况发生?

最佳答案

假设您可以调整您的 IDataProvider 接口(interface),似乎泛型就是这里的答案。如果您创建逆变和协变类型参数以与您的 IDataIDataInfo 类型一致,则可以切换定义以获得如下所示的内容:

public interface IDataProvider<in TIn, out TOut> where TIn : IDataInfo 
where TOut : IData
{
TOut GetData(TIn dataInfo);
}

您的 IBikeDataProvider 接口(interface)可以声明如下:

public interface IBikeDataProvider : IDataProvider<IBikeDataInfo, IBikeData> { }

这将导致以下具体类实例:

public class BikeDataProvider : IBikeDataProvider
{
public IBikeData GetData(IBikeDataInfo dataInfo)
{
// Do things
}
}

关于java - 我可以避免将接口(interface)方法参数类型转换为同一系列类的具体类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57578408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com