Вы можете сделать это с помощью оператора instanceof
:
SoyMapData soyModel;
if (model instanceof SoyMapData) {
// It is, get a reference using that type
soyModel = (SoyMapData)model;
}
... но если вам нужно это сделать, это предполагает проблему с инкапсуляцией в дизайне API. Ваш render
метод не должен знать, какой тип Map
он получает, что нарушает инкапсуляцию.
Есть много способов решить это. Одним из них является получение нового интерфейса из Map
, который позволяет render
выполнять свою работу, а затем использование этого интерфейса вместо Map
в сигнатуре метода. Но это только один способ.
Обновление : если вы обновили код, если я вас правильно понял, вы хотите вызвать compiledSoyTemplates.render
с аргументом SoyDataModel
или Map
в зависимости от того, является ли 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
);
}
}