gpt4 book ai didi

java - 为整个服务中使用的数据对象设计通用接口(interface)

转载 作者:行者123 更新时间:2023-11-30 07:48:35 25 4
gpt4 key购买 nike

一直在迁移一些遗留代码,我遇到了这个问题。

@Getter
@Setter
public class CollectedData
{
SkillResponse skills;
TrendingResponse storyMatch;
Map<String, String> slotData;
Map<String, String> slotDataSecondSource;
Boolean hasSlots;
Boolean hasSlotsSecondSource;
KnowledgeRequest request;
}

由于一直在使用java 8,习惯了流,所以开始将这个响应类重构为..

@Getter
@Setter
public class CollectedData
{
List<DataSupplierResponse> dataSupplierResponses;
Metadata metadata;
}

DataSupplierResponse 是一个像这样定义的接口(interface)..

public interface DataSupplierResponse<T>
{
DataSupplierType getDataSupplierType();

T getSupplierResponse();
}

实现示例:

public class DataSupplierResponseImpl implements DataSupplierResponse<TrendingResponse>
{
private TrendingResponse mTrendingResponse;

public DataSupplierResponseImpl(
TrendingResponse trendingResponse)
{
mTrendingResponse = trendingResponse;
}

@Override
public DataSupplierType getDataSupplierType()
{
return DataSupplierType.TRENDING_STORY;
}

@Override
public TrendingResponse getSupplierResponse()
{
return mTrendingResponse;
}
}

目标是根据 CollectedData 运行某些谓词。

Optional<DataSupplierResponse> first = data.getDataSupplierResponses().stream()
.filter(res -> res.getDataSupplierType().equals(DataSupplierType.TRENDING_STORY))
.findFirst();

这需要强制转换才能获得正确的对象。它返回对象

TrendingResponse match = first.get().getSupplierResponse();

因此,当我开始重构时,我假设通过创建返回不同数据的通用接口(interface)来解决这个数据可用的问题。为了使这段代码工作,我必须转换 getSupplierResponse 的返回对象,这违背了使用泛型的目的。为了我自己的缘故,我需要使这个 Data Carrier 对象尽可能干净漂亮。我应该如何构造这些类,和/或如何使用泛型来解决这个问题的任何想法。

编辑:我知道 StackOverflow 社区喜欢强制执行客观、具体的答案,但还有什么地方可以去解决设计问题?

最佳答案

您还必须使用泛型在 CollectedData 中指定 List。例如:

List<DataSupplierResponse> dataSupplierResponse;

实际上应该是:

List<DataSupplierResponse<YourType>> dataSupplierResponse;

其中 YourType 对应响应的类型。那是因为在使用 RawType 时(没有实际指定泛型的泛型类)该类的所有泛型信息都被删除。这就是它返回 Object 而您必须手动转换它的原因。

关于java - 为整个服务中使用的数据对象设计通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061091/

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