gpt4 book ai didi

java - 如何查看 map 类型?

转载 作者:行者123 更新时间:2023-11-29 03:53:18 32 4
gpt4 key购买 nike

我将模型中的数据设置为:

@RequestMapping("/forms/builder/")
public void renderMethod1(Model model) {
SoyMapData x=new SoyMapData("class","menu horizontal right");
model.addAttribute("pageTitles", x);
}

通过 Spring 映射到以下函数:

@Override
protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
String renderedResponse = null;
renderedResponse = compiledSoyTemplates.render(templateName, model, messageBundle);
}

这里我需要检查模型是否属于 SoyMapData 类型,如果是,则将模型类型设置为 SoyMapDataelse map。 我该怎么做?

我已经尝试过以下方法,但它不起作用。

最佳答案

您可以使用 instanceof 运算符来做到这一点:

SoyMapData soyModel;
if (model instanceof SoyMapData) {
// It is, get a reference using that type
soyModel = (SoyMapData)model;
}

...但如果您需要这样做,则表明 API 设计中的封装存在问题。您的 render 方法不需要知道它正在接收哪种类型的 Map,这会破坏封装。

有很多方法可以解决这个问题。一种是从 Map 派生一个新接口(interface),允许 render 完成它的工作,然后在方法签名中使用该接口(interface)而不是 Map .但这只是一种方式。


更新:关于您的更新代码,如果我理解正确的话,您想要使用 SoyDataModel 参数调用 compiledSoyTemplates.renderMap 参数取决于 model 是否为 SoyDataModel。 (例如,这是一个重载方法,您希望编译器知道要使用哪个方法。)如果是这样,那么您只需使用我在上面给您的信息,如下所示:

@Override
protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
String renderedResponse = null;
if (model instanceof SoyDataModel) {
renderedResponse = compiledSoyTemplates.render(
templateName,
(SoyDataModel)model,
messageBundle
);
}
else {
renderedResponse = compiledSoyTemplates.render(
templateName,
model,
messageBundle
);
}
}

关于java - 如何查看 map 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737193/

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