Я инициализирую одну хэш-карту, которая содержит ключ и объект подкласса.
@Provides
@Singleton
public Map<Locale, XlsxParserBase> getXlsxParserMap() {
Map<Locale, XlsxParserBase> xlsxParserMap = Maps.newHashMap();
xlsxParserMap.put(Locale.US, new com.us.XlsxParser());
xlsxParserMap.put(Locale.EU, new com.eu.XlsxParser());
return xlsxParserMap;
}
Эта карта инициализируется при запуске сервера.Теперь у меня есть класс менеджера, который имеет локаль.Я просто хочу сделать
xlsxParserMap.get(locale).parse();
, где каждый подкласс имеет реализацию синтаксического анализа и использует общие методы из базы.Когда я делаю это, я не могу получить доступ к анализу, потому что метод синтаксического анализа не присутствует в суперклассе.Поскольку карта имеет тип (Locale, XlsxParserBase), я не могу получить доступ к дочерним методам из ссылки XlsxParserBase.
Есть ли более простой способ добиться этого?Я не хочу помещать instanceOf в класс менеджера.Чтобы избежать этого, я подумал об этом подходе карты.Есть ли у экспертов лучший подход к моей проблеме?Дайте мне знать, если мне неясно или вам нужно больше фрагментов.